/* syntax highlight */ /* end of syntax highlight */

2010年11月29日 星期一

iphone app 開發 (十五) – 解析 Main.m

Bookmark and Share
影像 7   

 

main.m 是每次建立 Xcode 專案時會自動產生的一個檔案,通常我們不會去變動到,但還是要做了解,此篇針對這個每次都會產生的 code 做深入的解析。程式碼如下:

 #import <UIKit/UIKit.h>

  1.  
  2. int main(int argc, char *argv[])
  3. {
  4.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  5.     int retVal = UIApplicationMain(argc, argv, nil, nil);
  6.     [pool release];
  7.  
  8.     return retVal;
  9. }

 

第一行:

引入外部 library,大部份程式都會引入 UIkit 還有 Foundation ,此部份我們之後再談

第三行:

main是一個函式,前面的 int 表示回傳的數值格式為整數數值,後面給的 argc 與 argv 則是命令列參數 (command-line argument)。一般來說不會改變到,如果想要進一步了解可以看 這篇 文章。

第五行: 

此行的用意是表示在記憶體內保留一些空間給該執行程式,專案產生時一定會自動產生此行程式,如果讀者有進一步的興趣的話可以看 這篇 文章。

第六行:

宣告一個 retVal 物件,並利用 UIApplicationMain 此 class 產生,主要功能即為將control交到application手中。UIApplicationMain是在 UIKit Function Reference定義的,傳入四個參數分別為 int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName ,argc 是參數個數、argv 參數本體 (以陣列的型式存起來)、principalClassName 是 UIApplication class 的名稱,一般都設定為 nil (預設) ,如此一來就會依 UIApplication 命名,delegateClassName 是指實體化application delegate,一般也是預設為 nil ,就是會從 main nib  來 load delegate 物件,通常也不需要做變更,如果要了解的更深,可以閱讀 此篇 文章。

 

第七行:

當使用者關掉程式時,必須釋放記憶體,所以需要此行程式。需要注意的是如果使用 [pool drain] 意思差不多,只是多了 garbage collection 機制,如果要進一步學習可以看 這篇 討論串。

 

第九行:

retVal 是剛剛 UIApplication 所創造的物件,如果程式有正式的關掉,則回傳 0 ,表示程式正常結束,如果回傳非 0 的數值,表示有問題。

如果讀者想要清楚的了解,可以在 Xcode 選擇 Run → Debug Console 來看程式運行訊息的顯示,然後如果你開了 simulator 模擬然後又關掉後,Console 會出現 Program exited with status value: 0 表示正常結束。

 

參考資料

TEMPLATE-XCODE MAIN.M

0 意見:

張貼留言

Related Posts Plugin for WordPress, Blogger...