Xcode4.2以前的main函數以下:app
int main(int argc, char *argv[])ide
{函數
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];spa
int retVal = UIApplicationMain(argc, argv, nil, nil);代理
[pool release];code
return retVal;繼承
}ip
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 alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[TCViewController alloc] initWithNibName:@"TCViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
其中加粗部分爲新增部分。通過上面的修改,咱們就能夠在程序load的過程當中,省去加載MainWindow.xib文件,提升程序的速度。