2009-07-18 130 views
5

我正在爲iPhone開發Objective-C。當我們使用autorelease時,實際上什麼時候釋放對象 - 何時釋放主自動釋放池(即應用程序終止?),還是一旦本地函數結束?例如,我想要做這樣的事情:什麼時候發佈「autorelease」對象?

 
- (void) test 
{ 
    MyObj* p = [[[MyObj alloc] init] autorelease]; 
    ... 

    // is p 'released' here? 
} 

那麼將立即被釋放的函數退出「P」,或當該線程的自動釋放池被釋放?我認爲這是本地函數退出的時候,但我只是創建了自己的線程,需要建立一個自動釋放池這是給我當這實際上發生在第二個想法..

感謝

回答

6

的自動釋放對象autorelease池同時發佈。所以對於你的線程,它將在釋放池時釋放。在主線程中,如果你不創建自己的,我相信autorelease池每次都通過運行循環被排空 - 但我沒有看到一段時間。

+1

下面是autorelease池頁面的鏈接:http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html – Jonathon 2009-07-18 03:20:53

1

由於Argothian說,autorelease池被釋放時,它被釋放,這恰好每次通過循環運行在正常的Cocoa應用程序,在應用程序終止(當然,除非你沒有運行循環,在這種情況下,你必須創建自動釋放池,並自己釋放它)。自動釋放池不知道每個單獨的函數調用,所以在函數調用結束時不能釋放事物。

相關問題