NSTimer循環(huán)引用
因?yàn)閠imer必須手動(dòng)去除invalidate瓮钥,所以self必須引用timer,這樣就引用了timer
對(duì)于重復(fù)的timer來(lái)說(shuō)释移,因?yàn)閞unloop一直引用timer晴埂,所以timer必須手動(dòng)invalidate才能被釋放,timer又強(qiáng)引用self部蛇,所以會(huì)導(dǎo)致self無(wú)法釋放
解決方案
通過(guò)創(chuàng)建1個(gè)中間對(duì)象,timer持有中間對(duì)象咐蝇,中間對(duì)象弱應(yīng)用對(duì)象涯鲁,在中間對(duì)象里面調(diào)用timer重復(fù)執(zhí)行的方法,這樣當(dāng)前控制器可以釋放self有序,在中間對(duì)象執(zhí)行重復(fù)操作的時(shí)候抹腿,首先判斷弱引用對(duì)象有沒(méi)有被釋放掉,如果被釋放就置空timer旭寿。
runloop->timer? ? timer<---->self