iOS block 防循環(huán)引用

一般來說我們總會在設置Block之后,在合適的時間回調Block,而不希望回調Block的時候Block已經(jīng)被釋放了,所以我們需要對Block進行copy,copy到堆中,以便后用。
當一個Block被Copy的時候,如果你在Block里進行了一些調用,那么將會有一個強引用指向這些調用方法的調用者,有兩個規(guī)則:
如果你是通過引用來訪問一個實例變量,那么將強引用至self
如果你是通過值來訪問一個實例變量,那么將直接強引用至這個“值”變量

蘋果官方文檔里有兩個例子來說明這兩種情況:


20140729170542000.jpeg

上面第一種情況相當于用self.xxx來訪問實例變量,所以強引用指向了self;第二種情況把實例變量變成了本地臨時變量,強引用將直接指向這個本地的臨時變量。大多數(shù)情況下,我們只用處理第一種情況就行了,因為第二種情況雖然會造成循環(huán)引用,但是臨時變量很快就被釋放了,不會造成真正的循環(huán)引用。要避免強引用到self的話,用__weak把self重新引用一下就行了,像這樣:

<pre>__weak ViewController *weakSelf = self; </pre>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容