iOS Dev (38) 你不一定看懂瞭 main.m 文件 – iPhone手機開發技術文章 iPhone軟體開發教學課程

 

iOS Dev (38) 你不一定看到懂瞭 main.m 文件

  •  
  • 先看看代碼

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

    它都做瞭什麼?

    有兩個重點,一個是自動釋放池 autorelease pool。這個東東是 iOS5 引入 Auto Reference Counting 後加入的東東。要註意的是,這個貨意味著對應一個線程(在這裡,就是主線程)。而對於一個多線程的 Application,你應該再為其他線程準備 autorelease pool。

    另一個重點,就是 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 裡)。


    轉載請註明來自大銳哥的博客:https://blog.csdn.net/prevention

     

發佈留言