樓主:【使用block來解決】這一節(jié)存在兩處錯(cuò)誤:
1、NSTimer類對象不存在保留環(huán),NSTimer類對象不存引用timer實(shí)例對象的場景;
2、在使用NSTimer分類的對象的dealloc方法中,需要執(zhí)行timer的invalidate方法,不然timer會(huì)存在內(nèi)存泄漏問題。雖然對象中的timer屬性會(huì)置位nil,但是內(nèi)存中的timer仍被runloop強(qiáng)引用著,沒被銷毀(這個(gè)可以通過在block的首行增加一行控制臺(tái)日志打印來驗(yàn)證)。
其實(shí),該分類實(shí)現(xiàn)方案跟NSProxy方案類似,都是將timer的target對象轉(zhuǎn)移到其他對象,避免真正使用timer的對象被timer強(qiáng)引用(其實(shí)源頭是被runloop強(qiáng)引用著)。這樣,可以在真正使用timer對象的dealloc方法中調(diào)用timer的invalidate方法,來解除runloop對timer的強(qiáng)引用,進(jìn)而釋放timer對象。
iOS之NSTimer循環(huán)引用的解決方案前言 在使用NSTimer,如果使用不得當(dāng)特別會(huì)引起循環(huán)引用,造成內(nèi)存泄露。所以怎么避免循環(huán)引用問題,下面我提出幾種解決NSTimer的幾種循環(huán)引用。 原因 當(dāng)你在ViewC...