应用启动执行流程图
1.应用的生命周期
应用的生命周期的方法一般写在AppDelegate中
各个程序运行状态时代理的回调:
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
进程即将启动的时候代理会执行该方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
进程启动完成程序准备开始运行的时候执行该方法
- (void)applicationDidFinishLaunching:(UIApplication*)application
当程序载入后执行
- (void)applicationDidBecomeActive:(UIApplication *)application
当应用程序入活动状态执行
- (void)applicationWillResignActive:(UIApplication *)application
当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationDidEnterBackground:(UIApplication *)application
当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
- (void)applicationWillEnterForeground:(UIApplication *)application
当程序从后台将要重新回到前台时候调用。
- (void)applicationWillTerminate:(UIApplication *)application
当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
浅析main()和UIApplicationMain()
intmain(intargc,char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }
}
所有的C语言编写的程序,其执行入口都是main()函数
这段代码的UIApplicationMain函数会创建一个UIApplication对象,每个iOS应用程序有且仅有一个UIApplication对象,该对象的作用是维护运行循环.一旦程序启动,就会创建这个UIApplication对象,该对象的运行循环就会一直循环下去,main()函数也进入阻塞状态.
应用的状态:
#未激活状态(inactive)
程序在前台运行,不过没有接收到事件。
一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。
#激活状态(active)
程序在前台运行并接受到了事件
#后台状态
程序在后台且能处理事件,程序会在这个状态停留一段时间;事件到了会进入挂起状态(Suspended)。通过常驻线程可以保持长期处于Backgroud状态
#挂起(Suspended)
程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
##2.界面之间的生命周期
#1、 alloc
创建对象,分配空间
#2、init (initWithNibName|initWithCoder)
初始化对象,初始化数据
#3、awakeFromNib
所有视图的outlet和action已经连接,但还没有被确定。
#4、loadView
完成一些关键view的初始化工作,加载view。
#5、viewDidLoad
载入完成,可以进行自定义数据以及动态创建其他控件
#6、viewWillAppear
视图将出现在屏幕之前
#7、viewWillLayoutSubviews
将要对子视图进行调整
#8、viewDidLayoutSubviews
对子视图进行调整完毕
#9、viewDidAppear
视图已在屏幕上渲染完成
#10、viewWillDisappear
视图将被从屏幕上移除
#11、viewDidDisappear
视图已经被从屏幕上移除
#12、dealloc
视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
#13、didReceiveMemoryWarning
内存警告