iOS App的生命周期及界面的生命周期

应用启动执行流程图

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

内存警告

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容