iPhoneAPP开发指南https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iPhoneAppProgrammingGuide.pdf
关于mian方法:是APP的入口,由xcode 自动生成,负责与UIKit framework 交互,主要是:1.生成APP核心对象(core objects )包括UIApplication 对象。
2.如果有storyboard,从中加载UI3.回调自定义代码4.加入主循环
代码如下:#import
主循环The Main Run Loop UIApplication 对象在启动应用时建立主循环,处理所有的用户事件,更新界面。主循环是运行在主线程里的。如下图所示,用户触摸后,UIKit 把系统生成的事件传递给APP,APP把事件加入队列在主循环中一个一个的处理掉。UIApplication 对象会最先收到事件,并做出处理。触摸事件会被发到WINDOW再发到对应的视图。
app状态当用户按下home键,打入电话或者其他的中断事件都会引起APP状态的改变。1.not running,就是没运行,或者被系统干掉了。2.Inactive,APP在前台跑着,但是一直没事件输入。APP在这个状态不会待的太久。3.Background ,APP在后台并且在执行代码,应用进入这个状态很快就会被挂起,除非特别申请。4.Suspended ,还在内存里,不执行代码。进入这个状态系统不会发出通知。内存不足的时候,系统会干掉一些挂起的,也不通知。APP状态改变是会回调相应的代理方法。分为will did application:willFinishLaunchingWithOptions:相对其他方法,app加载时最先调用 application:didFinishLaunchingWithOptions:—在APP展现给用户之前的处理。 applicationDidBecomeActive:—APP将进入前台。 applicationWillResignActive:—APP即将离开前台. applicationDidEnterBackground:—APP进入后台,随时ke能被挂起。 applicationWillEnterForeground:—app马上进去前台,但还没活过来. applicationWillTerminate:—将被终止,如果从挂起状态方法不会执行。
APP应该做好随时被干掉的准备,并且不应该在干掉时才去存数据。系统会随时把那些没有响应或者行为非法的APP干掉。挂起的APP在被干掉时不会有通知。一个后台运行的APP在被干掉时会调用applicationWillTerminate: ,系统重启时这个方法不会调用。用户手动终止程序和系统是一样的。
线程和并发。apple不建议创建自己的线程,如果需要可以通过GCD (Grand Central Dispatch )等现成的接口。 GCD 可以定义执行内容和执行顺序,但是具体的excute由系统决定。这样代码更简单,并发更容易,性能更优越。多线程编程注意:1.有关views, Core Animation, 和 UIKit 类的处理应放在主线程;基于图像的操作可能会发生的后台线程。2.耗时操作应放在后台线程。比如网络,文件,大数据处理。3.加载应用时,与界面无关的加载都应该放在后台线程。