編輯文章
迴圈引用產生的原因是物件的互相引用導致產生了環釋放不了記憶體。
正常物件持有釋放順序是B物件是A物件的屬性,若對A傳送release訊息,致使A引用計數為0,則會dealloc A物件,而在A的dealloc的同時,會向B物件傳送release訊息,B被釋放,記憶體被正確回收。不正確的物件持有,A物件持有B物件,B物件持有A物件,A物件想要釋放需要它的持有者B物件傳送release訊息,但是B物件釋放也需要它的持有者A傳送relesase訊息,都在互相等待持有者傳送release訊息,就是迴圈引用,造成記憶體無法釋放。
如何接觸迴圈引用,例子。
delegate為什麼要用week修飾。
如果delegate用strong修飾,在B中A.delegate = B; 由於A的屬性delegate持有B,等於A持有B,但是B中又持有A,就造成了環,由於都是強引用,所以釋放不了,只有把delegate改成弱引用,才能打破這個環。
block中呼叫self的屬性為什麼要用__weak typeof(self) weakSelf = self。
由於self持有block,而如果block中在持有self的話,就形成了環,打破環的話就需要引用self的時候弱引用,讓它得以釋放。
迴圈引用
相關文章
- Python迴圈引用是什麼?如何避免迴圈引用?Python
- iOS迴圈引用iOS
- 解決迴圈引用
- require()迴圈引用問題UI
- Spring如何解決迴圈引用Spring
- SpringBoot 迴圈引用解決辦法Spring Boot
- iOS 關於NSTimer的迴圈引用iOS
- [NG] 考古 - HttpInterceptor 迴圈引用錯誤HTTP
- FastJson中迴圈引用的問題ASTJSON
- 全域性元件實現遞迴樹,避免迴圈引用元件遞迴
- 怎麼解決引用計數 GC 的迴圈引用問題?GC
- JavaScript 深複製的迴圈引用問題JavaScript
- Swift - 使用 Protocol 避免框架之間迴圈引用SwiftProtocol框架
- Block迴圈引用的三種解決方式BloC
- NSTimer迴圈引用的幾種解決方案
- iOS 進階 - 記憶體管理(八) -- 迴圈引用iOS記憶體
- Spring 迴圈引用(三)原始碼深入分析版Spring原始碼
- iOS-block迴圈引用詳解和應用iOSBloC
- iOS | 用於解決迴圈引用的block timeriOSBloC
- C++ 只能指標迴圈引用簡單測試C++指標
- 如何判斷一個js物件是否存在迴圈引用JS物件
- Spring的3級快取和迴圈引用的理解Spring快取
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- 透過迴圈引用問題來分析Spring原始碼Spring原始碼
- 迴圈引用導致的json序列化失敗JSON
- spring原始碼之bean的初始化及迴圈引用Spring原始碼Bean
- ARC下的block導致的迴圈引用問題解析BloC
- for 迴圈與 while 迴圈While
- while迴圈 case迴圈While
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- Rust 程式設計影片教程(進階)——015_1 引用迴圈Rust程式設計
- Swift與OC真正去理解Block解決迴圈引用的技巧SwiftBloC
- 無限for迴圈(死迴圈)
- while迴圈以及do while迴圈While
- Rust 程式設計視訊教程(進階)——015_1 引用迴圈Rust程式設計
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- 如何解決使用JSON.stringify時遇到的迴圈引用問題JSON
- if迴圈