2015-06-21 72 views
-4

誰呼叫自動釋放池或誰管理它。我在函數內部的變量上調用autorelease,但是誰負責管理這個autorelease調用,調用函數或調用者函數,還是誰做的?誰呼叫自動釋放池

+0

我不是很確定爲什麼downvotes。這是一個涉及正確使用autorelease及其操作的合法問題。 (儘管它*在*文檔中有介紹..) – user2864740

回答

1

首先,如果您要求autorelease,請不要。停止使用手動內存管理並使用ARC。它比你知道的更多。

好吧,讓我們假設你autorelease。然後它被放置在autorelease池中,並且其保留計數保持遞增。當自動釋放池耗盡時,其保留計數將再次遞減。當發生取決於你在談論什麼autorelease池。

  • 如果你確實使這個自動釋放池,然後當你告訴它drain它水渠。在ARC下,當我們到達@autoreleasepool{}指令塊的末尾時會發生這種情況。

  • 如果它是默認的自動釋放池,則運行時會照顧它,並且您對此無知或無法控制。在所有代碼完成並且應用程序閒置之後,您可以確信會有漏斗電話,但沒有任何保證。

+0

本書將幫助您瞭解autorelease機制:http://www.apeth.com/iOSBook/ch12.html#_autorelease – matt

+0

感謝Matt,我正在使用ARC,但深入挖掘autorelease ...所以這個問題... –

+0

因此,答案... – matt