CADisplayLink : 保证调用频率和品目刷新频率一致
NSTimer : 和runloop相关,之前的文章讲过,runloop会持有定时器.
1. 循环引用
CADisplayLink,NSTimer 会对target(一般是VC)产生强引用,而一般target也会持有这个定时器,因为要在合适的时机停止定时器,并且把定时器置为nil.
这样target和定时器相互持有,就会产生循环引用
2. 解除循环引用
解除引用闭环,引入一个第三方.
让定时器持有这个第三方对象.当定时器调用方法时,让这个第三方对象调用控制器里的相应方法.
1.直接调用方法
- 第三方中调用方法
2. 利用消息转发机制
- 然后消息转发给能处理的对象
- 也可以这样
3. 使用带有block的定时器
注意用__weak来修饰self