1)return語句可能只是那裏,因爲編譯器不知道該函數永遠不能返回(它不是畢竟,以任何特殊的方式標記)。因此,編譯器的代碼流分析會警告它缺少返回語句。這仍然無法解釋爲什麼UIApplicationMain()具有返回值。也許有一個錯誤情況,其實可以返回,誰知道呢。 2)我認爲在UIApplicationMain的main()中有一個autorelease池是錯誤的,因爲任何沒有池的對象都會在這個自動釋放池中結束,這個池在應用程序的整個持續時間內都會持續存在。如此有效的對象仍然泄漏。
通常,如果不存在自動釋放池,運行時會記錄有關缺失池的錯誤消息,並通知開發人員在_NSAutoreleaseNoPool上設置斷點以查找無池自動釋放的位置。在模板中找到的頂級NSAutoreleasePool實際上是,它隱藏了這個漏洞。如果需要的話,UIApplicationMain()應該建立自己的自動釋放池(無論如何它必須通過事件循環創建和拆除一個池,否則對象只會累加到外部池中,消耗所有內存)。如果有人認爲他們確實需要在調用UIApplicationMain()之前運行ObjC代碼(並且他們無法在applicationDidFinishLaunching中執行相同的工作),則他們始終可以在 UIApplicationMain()之前創建一個池。由於UIApplicationMain()被記錄爲永遠不會返回(比如exit()),因此無論如何都不需要在後面執行命令。游泳池永遠不會被釋放。
如果你看看Mac模板,他們實際上沒有游泳池。
3)即使雙擊Mac上的應用程序,也可以使用這些參數。操作系統以某種方式將某些信息傳遞給應用程序。第一個參數是可執行文件啓動時的路徑,這對於查找包中的文件是很有必要的,我猜想。在Mac上,在PSN(過程序列號)也將傳遞到一個應用程序從Finder啓動時的參數:
05.07.11 22:18:54,129 [0x0-0x21e21e].com.thevoidsoftware.MacTestApp: 0: /Volumes/RamDisk/MacTestApp-fdcuwfrzopalmgaufwujijhqhvjc/Build/Products/Debug/MacTestApp.app/Contents/MacOS/MacTestApp
05.07.11 22:18:54,129 [0x0-0x21e21e].com.thevoidsoftware.MacTestApp: 1: -psn_0_2220574
關於Mac模板,可能是因爲它們使用垃圾回收(而不是引用計數環境)?在iOS上,我們沒有它。 –
@Cyril Godefroy只有懶惰的開發者使用垃圾回收,默認情況下它沒有啓用。我討厭它,但那是我的意見。 – 2011-07-05 20:25:43
如果您有權訪問預發行軟件,您可以自己回答該問題。我不能再多說了。 – uliwitness