1.首先我們創建了一個網絡請求工具類
?
?
然后storyboard里面去創建了一個導航控制器 并且把它設置為初始控制器 ? 然后拖入一個bar button ?--show--到自帶的控制器
?
?這個時候運行代碼的結果是
?
?
?
x
?
顯然這個時候沒有造成循環引用 ??
為什么呢??????????????????
?
//沒有self的時候是沒有循環引用的
?
//tools是一個局部的變量 執行完了就會被釋放掉了
?
//這個時候出現了self沒有出現循環引用? 控制器也被釋放了
?
//block是右邊的finished? finished 對這個self.view進行強引用? finished執行完畢了然后就釋放掉了 ? 會解除對self的強引用? 并不會對self產生循環引用
?
?
例子2:
如果這個時候我們對控制器里面的那個networktools 中的tools對象來一個strong的強引用而不是copy的話
?
?這個時候的結果還是和之前是一樣的為什么???
控制器對self的解除引用是在finished執行完畢的時候
對這個tools的強引用沒有關系 ?
?
?
例子3:
block是一組準備好的代碼 ? 在需要的時候執行 ?可以當作參數傳遞 ?
在異步的方法中能夠執行block 的話就直接執行 ? 如果當前方法不能直接執行block 通常需要定義一個屬性 ? 記錄block 在需要的時候執行
上圖了:
?
這個時候期待的循環引用就出現了
?
?