程序的启动原理
1、main函数
2、UIApplicationMain
创建UIApplication对象
创建UIApplication的delegate对象
main函数会执行一个UIApplicationMain这个函数,intUIApplicationMain(int argc,char*argv[],NSString *principalClassName,NSString *delegateClassName);argc、argv:直接传递给UIApplicationMain进行相关处理即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或者是子类)。如果是nil,则用UIApplication类作为默认值。
delegateClassName:指定应用程序的代理类,该类必须准守ApplicationDelegate协议
UIApplicationMain函数或根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性。
接着会创建应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序调用delegate对象的application:didFinishLaunchingWithOptions方法)
3、delegate对象开始处理(监听)系统事件(没有storyboard)
程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions方法
在application:didFinishLaunchingWithOptions;中创建UIWindow
创建和设置UIWindow中的rootViewController
显示窗口
补充 Appdelegate中的代理方法
当程序启动完毕的时候就会调用(系统自动调用)application:didFinishLaunchingWithOptions
即将失去活动状态的时候调用(失去焦点,不可交互)applicationWillResignActive
重新获取焦点(能够和用户交互)applicationDidBecomeActive
应用进入后台的时候调用(一般在该方法中保存应用的数据和状态)applicationDidEnterBackground
应用即将进入前台的时候调用(一般在该方法中恢复应用的数据状态和数据)applicationWillEnterForeground
应用程序即将被销毁的时候调用该方法(程序处于挂起的时候无法调用该方法)applicationWillTerminate
应用程序接收到内存警告的时候调用(一般在该方法中释放掉不需要的内存)applicationDidReceiveMemoryWarning
4、根据info.plist获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)
创建UIWindow
创建和设置UIWindow的rootViewController
显示窗口
总结
程序启动的时候 Not runing —>Inactive(前台非活跃状态) —>Active(前台活跃状态)
Not runing —>Inactive 调用application:didFinishLaunchingWithOptions方法 发出UIApplication-DidFinishLaunchingNotification通知
Inactive —>Active 调用applicationDidBecomeActive方法 发出 UIApplicationDidBecomeActive - Notification 通知
点击home键 Active —>Inactive —>Background —>Suspended
Active —>Inactive 调用 applicationWillResignActive 方法发出 UIApplicationWillResignActive -Notification 通知
Inactive —>Background 从非活跃状态进入到后台
Background —>Suspended 调用applicationDidEnterBackground方法 发送 UIApplicationDidEnterBackground-Notfication 通知
程序挂起到重新运行场景Suspended —>Background —>Inactive —>Active
Suspended —>Background 调用 applicationWillEnterForeground 方法 发出UIApplicationWillEnterBacakgroundNotfication 通知
Background —>Inactive 从后台状态进入到非活跃状态
Inactive —>Active调用 applicationDidBecomeActive 方法 发送 UIApplicationDidBecomeActiveNotfication通知
求不喜勿喷,有错的地方请各位指出,看到后会立刻改正
网友评论