自動釋放池

2021-08-16 21:06:18 字數 654 閱讀 6518

autorelease本質上就是延遲呼叫release方法

autorelease物件什麼時候釋放?

引用計數為0的時候才會釋放, 不是出了pool就釋放

在一些很消耗記憶體的迴圈呼叫的場景下有時需要手動干預autoreleased物件的釋放時機, 不然會導致記憶體暴增, 最終導致程式崩潰

nsthread和nsrunloop是一一對應的關係

在nsrunloop物件的每個執行迴圈開始前,系統會自動建立乙個autoreleasepool,並在執行迴圈結束時drain掉這個pool, 同時釋放掉所有autoreleased物件

autoreleasepool只會對應乙個執行緒, 每個執行緒可能會對應多個autoreleasepool

使用block版本的列舉時候,內部會自動新增乙個autoreleasepool

普通的for迴圈forin迴圈沒有,所以還是新版的block更方便, 但新能還是forin更高

1.如果你編寫的程式不是基於ui框架的比如命令列工具

2.for迴圈中遍歷生產大量autorelease變數時, 就需要手動新增區域性autoreleasepool來進行手動干預

3.如果你建立乙個子執行緒, 一般會自定義繼承自nsopertaion的操作, 在main方法中要加上, 子執行緒上是無法訪問主線程的自動釋放池所以的自己建立

自動釋放池

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

自動釋放池

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

自動釋放池NSAutoReleasePool

nsautoreleasepool用於支援coco的引用計數記憶體管理 使用arc時 nsautorelease pool nsautoreleasepool alloc init pool release 是否使用arc都可以,效率更高 aurorelease addobject addobjec...