NSProxy解決迴圈引用問題

2021-08-20 05:50:37 字數 444 閱讀 9107

最近在使用nstimer

新增到runloop

,發現引用timer的view和controller無法正常釋放,即不會呼叫view或者controller的

dealloc

方法。這是因為timer在新增target時,timer持有target,而target本身又持有timer,導致迴圈引用。

今天偶然看到yykit的作者寫的yyweakproxy,說是用於解決迴圈引用問題,於是,試了下,發現timer真的可以釋放了:

查了下資料,發現

nsproxy

真的是乙個神奇又少見的類,其關鍵原理就是訊息**(message forward),可以參考這篇文章,描述的比較形象易懂:nsproxy——少見卻神奇的類

更多的資料:

協議和 nsproxy 實現多繼承

yyweakproxy

解決ARC的迴圈引用問題

看看下面的程式有什麼問題 bnritem.h inte ce bnritem nsobject property nonatomic,strong bnritem containeditem property nonatomic,strong bnritem container end bnrite...

利用NSProxy解決NSTimer記憶體洩漏問題

之前寫過一篇利用runtime解決由nstimer導致的記憶體洩漏的文章,最近和同事討論覺得這樣寫有點複雜,然後發現有nsproxy這麼好用的根類,根類,根類,沒錯nsproxy與nsobject一樣是根類,都遵守協議。實際上本篇用了訊息 的機制來避免nstimer記憶體洩漏的問題,無論是nspro...

迴圈引用問題

main.m 07 迴圈引用 created by kevin on 13 8 9.1.class的作用 僅僅告訴編譯器,某個名稱是乙個類 class person 僅僅告訴編譯器,person是乙個類 2.開發中引用乙個類的規範 1 在.h檔案中用 class來宣告類 2 在.m檔案中用 impo...