iOS知识收录iOS Developer

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

上一篇下一篇

猜你喜欢

热点阅读