2012-02-11 21 views
1

比方說,我想創建新的對象,而不是整個程序的持續時間。我需要在啓動時創建它們,並在整個程序中不斷運行後臺任務。如果我將它們放在applicationDidFinishLaunching下的應用程序的委託中,那麼這些對象是存在於整個程序的持續時間還是applicationDidFinishLaunching的範圍?在applicationDidFinishLaunching返回後,我的對象是否超出範圍,或者它們是否繼續運行後臺任務?如果是這樣,我如何確保在整個程序期間存在對象並繼續運行後臺任務?Cocoa的應用程序委託範圍有限嗎?

「後臺任務」正在單獨的線程上運行。我在Mac OS X Snowleopard上使用Objective-C與Xcode 3.2.6。

回答

1

手動控制Objective-C對象的生命週期(假設您沒有使用垃圾收集或ARC)。你不應該問在整個程序期間它們是否存在 - 相反,你應該確保每一個對象的引用,不管它在哪裏(主線程,後臺線程)被正確保留。請參閱basic memory management rules

具體而言,如果您使用[[MyClass alloc] init]創建對象,則您現在擁有對該對象的擁有引用(您負責最終釋放該對象)。如果您然後啓動一個新線程併爲該線程提供對該對象的引用,那麼該線程應該調用[obj retain]以確保該對象將繼續存在,並在該對象完成時調用[obj release]