多语言展示
当前在线:369今日阅读:168今日分享:49

IOS开发学习笔记-1

APP生命周期
工具/原料

iPhoneAPP开发指南https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iPhoneAppProgrammingGuide.pdf

方法/步骤
1

关于mian方法:是APP的入口,由xcode 自动生成,负责与UIKit framework 交互,主要是:1.生成APP核心对象(core objects )包括UIApplication 对象。 2.如果有storyboard,从中加载UI3.回调自定义代码4.加入主循环 代码如下:#import #import 'AppDelegate.h'int main(int argc, char * argv[]){    @autoreleasepool {        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));    }} argc, argv:程序启动时间   nil:用哪个类来启动应用,为空会先检测Info.plist的NSPrincipalClass键值,没有使用UIApplication来启动(创建)应用。 NSStringFromClass([AppDelegate class]):对应用程序使用AppDelegate代理,也就是AppDelegate类实现了回调接口。 核心对象: 1.UIApplication对象: 指运行中的应用程序,负责系统和APP中其他对象间的交互,如下图所示。它的主要工作是处理事件循环和高级别的任务,对一些关键的APP行为调用代理方法。UIApplication是没有子类的。 2.App delegate 对象, UIApplication 用来回调的,包括初始化,响应时间,状态改变。 3.数据模型对象,Documents and data model objects data 对象就是用来存数的。document对象非必须,用来管理组织data 对象4.View controller 视图控制器对象   负责把内容呈现到屏幕上,通常是一个View和N多子View。在需要的时候,试图控制器把这些Views装载到WINDOW。   UIViewController 是所有试图控制器的基类,它默认的加载和显示Views,自动的响应横竖屏切换等。在framework中有现成的image picker, tab bar , navigation 等控制器。5.UIWindow 对象  用来装Views的,通常只有一个(需要的话也可以多个)。试图控制器通过更换UIWindow 对象中的View来改变显示内容。另外UIApplication 对象通过UIWindow 对象把事件传递到View和ViewController6.视图对象,控件对象,层对象View objects, control objects, and layer objects  视图和控件用来呈现内容,层对象Core Animation layers 用来做效果的。

2

主循环The Main Run Loop UIApplication 对象在启动应用时建立主循环,处理所有的用户事件,更新界面。主循环是运行在主线程里的。如下图所示,用户触摸后,UIKit 把系统生成的事件传递给APP,APP把事件加入队列在主循环中一个一个的处理掉。UIApplication 对象会最先收到事件,并做出处理。触摸事件会被发到WINDOW再发到对应的视图。

3

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:—将被终止,如果从挂起状态方法不会执行。

4

APP应该做好随时被干掉的准备,并且不应该在干掉时才去存数据。系统会随时把那些没有响应或者行为非法的APP干掉。挂起的APP在被干掉时不会有通知。一个后台运行的APP在被干掉时会调用applicationWillTerminate: ,系统重启时这个方法不会调用。用户手动终止程序和系统是一样的。

5

线程和并发。apple不建议创建自己的线程,如果需要可以通过GCD (Grand Central Dispatch )等现成的接口。 GCD 可以定义执行内容和执行顺序,但是具体的excute由系统决定。这样代码更简单,并发更容易,性能更优越。多线程编程注意:1.有关views, Core Animation, 和 UIKit 类的处理应放在主线程;基于图像的操作可能会发生的后台线程。2.耗时操作应放在后台线程。比如网络,文件,大数据处理。3.加载应用时,与界面无关的加载都应该放在后台线程。

推荐信息