thread中runloop未開啟,autorelease對象何時釋放?

首先明確一點,autorelease對象的釋放,跟runloop沒有本質的關系,只跟當前所處的autorelease pool有關。

  • 每個線程默認擁有一個runloop,除主線程外,線程的runloop默認未開啟。

  • 每個runloop默認擁有一個autorelease pool。

  • 線程開啟runloop的情況下,runloop循環中的autorelease對象將在runloop的autorelease pool結束時被釋放。

  • 要將一個函數加入到某個線程的runloop中,可以通過performselector onthread,AddSource,AddTimer等方法將函數加入到線程的runloop中,當然函數中的autorelease對象也被加入到runloop對應的autorelease pool中。

  • 線程函數自身的autorelease對象,如果沒有加入到線程的runloop中,那就跟線程的runloop自帶的autorelease pool沒有任何關系了。

  • runloop 休眠前或者結束前,均會釋放舊池創建新池。池中的autorelease對象也將被釋放。

子線程中是否擁有一個隱藏的autorelease pool,并沒有明確的官方文檔說明。但是官方文檔明確指出:creating an autorelease pool should be the first thing you do in your thread entry routine. (Threading Programming Guide)

所以不要猜測thread自身是否擁有一個autorelease pool,自己創建一個才是正確的選擇。

歡迎指正!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容