iOS5編程 -- main函數研究

Xcode4.2以前的main函數以下:app

int main(int argc, char *argv[])ide

{函數

    NSAutoreleasePool *pool = [[NSAutoreleasePool allocinit];spa

    int retVal = UIApplicationMain(argc, argv, nilnil);代理

    [pool release];code

    return retVal;繼承

}ip


Xcode4.2工程中的主函數爲

int main(int argc, char *argv[])ci

{it

    @autoreleasepool {

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([TCAppDelegate class]));

    }

}

能夠看出一個重要的變化是在4.2使用了ARC技術後,NSAutoreleasePool被廢棄,改用@autoreleasepool,這裏請不要該回原先的方式,若是改變後,在開啓ARC選項後,程序將不能經過編譯。

不論那個版本,UIApplicationMain函數都是程序的關鍵點,下面是對這個函數的分析:

UIApplicationMain()函數是初始化程序的核心,它接受4個參數。其中argc和argv兩個參數來自於main()接受的兩個參數;另外兩個String型參數分別表示程序的主要類(principal class)和代理類(delegate class)。若是主要類(principal class)爲nil,則默認爲UIApplication;若是代理類(delegate class)爲nil,則程序假設程序的代理來自Main nib文件。若是這兩個參數任意一個不爲nil,則UIApplicationMain()函數則會根據參數建立相應的功能類。所以,若是程序中使用自定義的UIApplication類的子類(不建議繼承UIApplication類創建自定義的子類),你須要將你的自定義類名做爲第3個參數傳進來。

根據上面的分析,咱們來看如下iOS程序的聲明週期


對於UIApplicationMain函數中的第四個參數,咱們也能夠看出新舊版本的不一樣,咱們建議在原先的工程中使用新的版本,以提升程序的速度,共修改以下幾處

假如你的工程類都是以TC開頭。

1.import你的appdelegate類,並修改第四個參數以下:

UIApplicationMain(argc, argv, nil, NSStringFromClass([TCAppDelegate class]));

2.刪除MainWindow.xib文件

3.在工程的Info.plist文件中刪除下面一行


4.在TCAppDelegate.m文件中,修改

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函數,以下:

    self.window = [[UIWindow allocinitWithFrame:[[UIScreen mainScreenbounds]];

    // Override point for customization after application launch.

    self.viewController = [[TCViewController allocinitWithNibName:@"TCViewController" bundle:nil];


    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

其中加粗部分爲新增部分。

通過上面的修改,咱們就能夠在程序load的過程當中,省去加載MainWindow.xib文件,提升程序的速度。

相關文章
相關標籤/搜索