iOS循環引用問題

OC的內存管理應用了計數的方式來管理內存,這種方式雖然很簡單,但是有一個比較大的瑕疵,就是它不能很好的解決循環引用的問題.例如對象A和對象B,相互引用了對方作為自己的成員變量,只有當自己銷毀時,才會將成員變量的引用計數減1.因為對象A的銷毀依賴于對象B的銷毀,而對象B的銷毀也依賴于對象A的銷毀,這樣就造成了循環引用的問題即使在外界已經沒有任何指針能夠訪問到他們了,他們依然無法被釋放.

循環引用解決的方法:

我們都知道平常使用協議代理的時候我們要使用弱引用(weak),原因就是弱引用雖然持有對象,但是并不增加引用計數,這樣就避免了循環引用的產生.例如:兩個ViewController? A和B,A需要彈出B,讓用戶來進行輸入等操作,然后B需要將內容傳給A,這個時候ViewController的delegate成員變量通常是一個弱引用,以避免兩個控制器相互引用對方造成循環引用問題.

怎么用Xcode檢測循環引用問題:

Xcode有個Instruments工具集可以檢測循環引用.在菜單欄選擇Product->Profile ? ?然后選擇Leaks,再單擊右下角的Profile按鈕,這個時候模擬器會運行起來,如果出現循環引用就出出現紅色的線條,然后我們可以切換到Leak這欄,單擊Cycles&Roots就能看到已圖形的方式顯示出來的循環引用.

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

推薦閱讀更多精彩內容