NSTimer循环引用
因为timer必须手动去除invalidate,所以self必须引用timer,这样就引用了timer
对于重复的timer来说,因为runloop一直引用timer,所以timer必须手动invalidate才能被释放,timer又强引用self,所以会导致self无法释放
解决方案
通过创建1个中间对象,timer持有中间对象,中间对象弱应用对象,在中间对象里面调用timer重复执行的方法,这样当前控制器可以释放self,在中间对象执行重复操作的时候,首先判断弱引用对象有没有被释放掉,如果被释放就置空timer。
runloop->timer timer<---->self
网友评论