2012-04-28 71 views
3

隨着ARC的曙光在xcode中出現了一個新的主要函數模板,這使得更有意義。但是,我對舊模板有疑問。爲什麼這樣的可可觸摸主要功能模板?

殊不知,在XCode中可可觸摸應用舊的主函數模板是這樣的:

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

不過,最後兩行是不可訪問,因爲文件明確指出,UIApplicationMain不會返回。它只是在完成時調用exit()。那麼爲什麼蘋果選擇這樣的模板呢?爲什麼不是這個?

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    return UIApplicationMain(argc, argv, nil, nil); 
} 

這是因爲人們會以此爲例,而不是正確地釋放他們的autorelease池嗎?或者因爲它會使靜態分析儀發生故障?或者其他可能?

這個問題可能太開放了,所以我會以另一種方式提出。按照Apple的方式使用該模板是否存在技術原因?

+0

只是一個想法:當你說「UIApplicationMain永遠不會返回[值]」,你是不是自相矛盾,你建議返回UIApplicationMain,即使主函數需要返回一個int值? – pasawaya 2012-07-26 06:01:09

回答

1

不是一個很好的答案,但如果你真的嘗試你的例子,那麼你會得到一個Unused variable警告,這將是一個有點鬆懈,給每個人一個新創建的項目的警告。

+0

其實,這個答案很好! 「防止編譯器警告」是完全可以接受的。我會稍等一下,看看是否有其他人進來,但如果沒有,我會高興地接受這一個。 – borrrden 2012-04-28 15:37:14