NSTimer不能释放的问题
2018-01-11 本文已影响22人
captainGao
终于闲下来,随便写点东西,不是高深的东西,只是随手记下
NSTimer会引起循环引用问题,当在一个ViewController中引用NSTimer的对象的时候,如果把Timer的repeat置为YES,那么当ViewController出栈的时候,控制器无法释放,同时,timer的事件也在一直执行,代码如图
WechatIMG5.jpeg
这是因为,计数器的repeats设置为YES的时候, self的引用计数会加1. 因此可能会导致self (即ViewController) 不能release
那么怎么解决呢?
最简(low)单(b)的方法就是在ViewController将要消失的时候,将timer停止,并且置为空,代码如图
WX20180111-141911@2x.png
其实呢 我们可以把这个方法进一步封装,为了使代码的可读性更好,在这里呢,写了一个分类,用block的方式把timer要执行的事件传出来,因为repeat为YES,但是,个人觉得,写成分类,会把这种持续执行的事件给自身,不会影响到其他的类,代码如图
WX20180111-142257@2x.png
这样就完美解决了timer释放不了的问题!
最后附上github地址,大神勿喷
https://github.com/Chris-Gaptain/CCTimerBlock