小松的技术博客

六和敬

若今生迷局深陷,射影含沙。便许你来世袖手天下,一幕繁华。 你可愿转身落座,掌间朱砂,共我温酒煮茶。

iOS的生命周期

这篇文章应该很久之前就应该出来的,可是由于太懒,就一直没有写下来,但是事情不应该拖得太久,没有及时的总结与归纳,可能转眼间自己就已经忘记了曾经所学。

iOS是一个优秀的移动平台,由苹果公司创造和维护,目前最新版本为8.1,目前可以采用Objective-C和Swift两种语言编写iOS应用,Swift是2014年苹果WWDC大会上提出的新编程语言,是用来取代Objective-C的,并且降低了开发者入门的门槛,但目前由于大量的应用都是Objective-C的编写的,因此Objective-C目前阶段应该依然都是主流。况且学习iOS关键在于cocoa框架的学习,语言只是工具而已。

学习iOS主要需要对苹果cocoa框架有深入的了解,其由两个部分组成,一部分是Foundation框架,其含有数目庞大的基本数据类型和其它对象,其本身是可以独立于cocoa框架的,主要是丰富Objective-C的羽翼,而另一个部分就是UIkit框架,该框架含有大量的我们将使用的图形对象以及用于iOS的事件模型的所有功能。

学习移动端很重要的一点事就是掌握其生命周期,其生命周期规定了一个应用的生命轨迹,这对于闭源的iOS来言,更是无法更改的。所以iOS开发者做的事情就是用自己的代码填充一个应用的各个阶段,让这个应用充实起来。这好比我们的一生将经历生老病死的各个阶段,这是无法更改的,但我们可以用我们的行动来填充各个阶段,用激情在生命的轨迹中绘制出美好的画面。

应用主入口:

iOS程序主入口就是一个main函数,其代码也很简洁:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

@autoreleasepool是自动释放池,UIApplicationMain行创建了应用程序并开始了事件循环,我们可以更改此程序但通常不这么做,因为这里主要是起入口作用,而我们应该放下这个文件转向编程真正开始的文件:应用程序委托 。

应用程序生命周期

应用程序生命周期管理的是关于应用程序加载、内存过低、应用程序即将退出、应用程序后台运行等状态的改变时我们的操作,其操作具体可以在AppDelegate.m文件下进行。

applicationDidFinishLaunching:应用程序已经加载,你应当创建初始窗口或程序启动

applicationDidReceiveMemoryWarning:应用程序收到低内存警告,你应当释放内存

applicationWillResignActive:应用程序即将注销激活状态

applicationDidEnterBackground:应用程序已经进入后台运行状态

applicationWillEnterForeground:应用程序即将进入前台界面

applicationDidBecomeActive:应用程序已经被激活

applicationWillTerminate:应用程序即将结束。

一个页面的生命周期

一个应用程序有生命周期,而我们看到的更多的是一个个独立开来的页面,这是我们操作的单元,其也有自己的生命周期。

一个页面的管理者就是viewController,它负责着页面的生命周期管理。

其生命周期执行流程为:init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

除此之外还有一个非常关键的执行步骤:viewDidLayoutSubViews,它是专门用来布局子视图用的,当视图加载、屏幕旋转等发展时就会重新调用这个方法来进行子视图的重绘,以此来做内容的自适应,因此我们的做法通常是把每个view的定义及其固定属性放在生命周期的init及loadView环节,而把每个view的布局放在viewDidLayoutSubViews。

做iOS最大的感受就是用恰当的方式做恰当的事情,否则真的很费力,更多的需要去理解cocoa库及其给我们开放的各个接口,如此才能得心顺手的做iOS开发。

←支付宝← →微信 →
comments powered by Disqus