最近在使用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...