自動釋放池 Autorelease Pools

2021-06-25 09:39:35 字數 461 閱讀 1630

自動釋放池

(autorelease pools)

每個執行緒都維護它自己的

nsautoreleasepool

的棧物件。

cocoa

希望在每個當前

執行緒的棧裡面有乙個可用的自動釋放池。如果乙個自動釋放池不可用,物件將不會給釋放,從而造成記憶體洩露。對於

的主線程通常它會自動建立並消耗乙個自動釋放池,但是輔助線程(和其他只有

foundationd

的程式)在使用

cocoa

前必須自己手工建立。如果你的執行緒是長時間執行的,那麼有可能潛在產生很多自動釋放的物件,你應該週期性的銷毀它們並建立自動釋放池

(就像

對主線程那樣

)。否則,自動釋放物件將會積累並造成記憶體大量占用。如果你的脫離執行緒沒有使用

cocoa

,你不需要建立乙個自動釋放池。 

自動釋放池

自動釋放池是什麼時候建立的?又是什麼時候銷毀的?原題 思考 1,有返回值的類方法建立出來的物件都是autorelease的。autorelease物件出了作用域後,就會被新增到自動釋放池中。如果largenumber非常大,有可能在乙個for中就把自動釋放池填滿,記憶體消耗非常大!2,解決方案 在f...

自動釋放池

autorelease本質上就是延遲呼叫release方法 autorelease物件什麼時候釋放?引用計數為0的時候才會釋放,不是出了pool就釋放 在一些很消耗記憶體的迴圈呼叫的場景下有時需要手動干預autoreleased物件的釋放時機,不然會導致記憶體暴增,最終導致程式崩潰 nsthread...

自動釋放池

自動釋放池是允許你放棄對乙個物件的持有關係,但可以避免它立即被 的乙個工具,當從方法返回你的物件的時候,這個功能很有用。1 程式的入口處於在main 函式 這就意味著整個應用都在自動釋放池中,所有的物件最後都會被 int main int argc,char argv 2 autoreleasepo...