main.m文件代码
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
重点1:
自动释放池 autorelease pool。这个是 iOS5 引入 Auto Reference Counting 后加入的。
要注意的是,这个意味着对应一个线程(在这里,就是主线程)。而对于一个多线程的 Application,你应该再为其他线程准备 autorelease pool。
重点2:
就是 UIApplicationMain。这最基本的功能,自然是创建一个 Application 对象。
其次呢,它还会创建相应的委托对象(Delegate),Application 在应用出现相应状态变化时调用相应的协议方法。
它负责建立应用程序的事件循环(Event Loop),事件循环中可以不断接收交互操作,比如屏幕触摸手势、各类传感器(重力加速器、陀螺仪等)等。
关于UIApplication
我们知道,一个可以拿出来得瑟的应用,至少要有一个 UIApplication 作为主体,接收各类 events。而还要有一个 UIApplicationDelegate 来作为具体处理 events 的家伙。简单说,前者接收事件,后者处理事件。
接收事件这部分的代码,iOS 都帮你写好了,你只需要把如何处理事件的代码写出来就行了。UIApplicationMain 会自动创建 UIApplication,这就是所谓“帮你写好了”。里面到底咋回事,你不用管。
你要做的,就是把 UIApplicationDelegate 搞定。工程创建好后,有一个 AppDelegate 这货在那。这货的代码如下:
#import
@interface AppDelegate : UIResponder
@property (strong, nonatomic) UIWindow *window;
@end
那么你看看 AppDelegate.m 文件,就知道这货都是如何处理事件的了(事实上,并没有啥代码,代码都被封装在了 UIApplicationDelegate 里)。