iOS Developer

浅析——iOS是怎样运行一个应用程序的

2017-04-18  本文已影响203人  无忌不悔

当我们的iOS设备运行一个app时,发生了什么?

what happens on iOS

首先,来简单了解一下iOS。

iOS(原名 iPhone OS,自 iOS 4 后改名为 iOS)是苹果公司为移动设备所开发的专有移动操作系统。

历史

2007 年 1 月 9 日,苹果在 2007 Macworld 大会中发表了 iOS ( 当时名为 iPhone OS ),并于同年 6 月 29 日发布了 iOS 的第一个版本。iOS 可以通过 iTunes 对设备进行升级,在 iOS 5 及以上版本中亦可以利用 OTA ( On the Air ) 的方式进行软件更新。iOS 必须要与设备经由苹果服务器进行验证,验证方式可通过 iTunes ( iOS 5 及以上版本亦可通过 iCloud 服务验证 ) 并自动同步。[9]WWDC 2013 中,苹果发布了 iOS 7,彻底更改了用户界面,将原本拟物的风格转变为平面化风格。最初苹果公司并没有给随 iPhone 发行的 iOS 一个独立的称谓,直到 2008 年才取名为 iPhone OS,并在 2010 年 6 月改名为 iOS。

系统架构

  1. 核心操作系统层(Core OS):直接跟硬件交互的,例如内存管理,文件系统等。
  2. 核心服务层(Core Services)=>访问IOS提供的一些服务,例如网络,定位,线程等
  3. 媒体层(Media)=>音频,图像,动画处理等
    可触摸层(Cocoa Touch)=>界面,做IOS开发主要面向Cocoa
  4. Touch层
    Cocoa Touch层中的很多技术都是基于Objective-C的,包括Foundation和UIKit;

言归正传,iOS程序运行原理

  1. 首先执行main函数;
  2. 执行UIApplicationMain函数。第四个参数指定UIApplication的代理,第三个参数指定UIApplication的类名;
  3. UIApplicationMain函数内部

** 这里,有必要对一些重点问题进行说明:**

Run loop

Run loops are part of the fundamental infrastructure associated with threads. A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events. The purpose of a run loop is to keep your thread busy when there is work to do and put your thread to sleep when there is none.
—— Apple Developer

简言之,这是一个线程输入和使用运行事件处理程序响应传入事件的循环。项目中的代码提供了用于执行循环的实际循环部分的控制语句,也即提供了驱动循环的while循环或for循环。在你的循环中,你使用一个运行循环对象来“运行”接收事件的事件处理代码,并调用已安装的处理程序。

关于Run Loop更详细的资料请参考RunLoopManagementiOS runloop

UIApplication的生命周期

View 的加载过程

创建控制器后,首先判断控制器是否已经有view了,如果没有,会先调用控制器的loadView方法。然后判断loadView里面是否提供了加载view的方法,如果没有,会加载控制器的storyboard文件。如果storyboard文件也没有可加载的view,就会根据xibName查找对应的xib文件。


View 的加载过程

** 关于UIViewController的生命周期的问题,有很多资料可以参考,在此不作赘述。 **

我们iOS就是这样由我们的代码一步一步地将应用程序所需要的界面和功能展现给用户的。

上一篇 下一篇

猜你喜欢

热点阅读