Block的循環引用詳解

1.首先咱們建立了一個網絡請求工具類網絡

 

 

而後storyboard裏面去建立了一個導航控制器 而且把它設置爲初始控制器   而後拖入一個bar button  --show--到自帶的控制器異步

 

 這個時候運行代碼的結果是工具

 

 

 

x對象

 

顯然這個時候沒有形成循環引用   blog

爲何呢??????????????????變量

 

//沒有self的時候是沒有循環引用的bfc

 

//tools是一個局部的變量 執行完了就會被釋放掉了network

 

//這個時候出現了self沒有出現循環引用  控制器也被釋放了循環

 

//block是右邊的finished  finished 對這個self.view進行強引用  finished執行完畢了而後就釋放掉了   會解除對self的強引用  並不會對self產生循環引用引用

 

 

例子2:

若是這個時候咱們對控制器裏面的那個networktools 中的tools對象來一個strong的強引用而不是copy的話

 

 這個時候的結果仍是和以前是同樣的爲何???

控制器對self的解除引用是在finished執行完畢的時候

對這個tools的強引用沒有關係  

 

 

例子3:

block是一組準備好的代碼   在須要的時候執行  能夠看成參數傳遞  

在異步的方法中可以執行block 的話就直接執行   若是當前方法不能直接執行block 一般須要定義一個屬性   記錄block 在須要的時候執行

上圖了:

 

這個時候期待的循環引用就出現了

 

相關文章
相關標籤/搜索