天天看點

main.m 檔案解釋

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 裡)。