楼主:【使用block来解决】这一节存在两处错误:
1、NSTimer类对象不存在保留环,NSTimer类对象不存引用timer实例对象的场景;
2、在使用NSTimer分类的对象的dealloc方法中,需要执行timer的invalidate方法,不然timer会存在内存泄漏问题。虽然对象中的timer属性会置位nil,但是内存中的timer仍被runloop强引用着,没被销毁(这个可以通过在block的首行增加一行控制台日志打印来验证)。
其实,该分类实现方案跟NSProxy方案类似,都是将timer的target对象转移到其他对象,避免真正使用timer的对象被timer强引用(其实源头是被runloop强引用着)。这样,可以在真正使用timer对象的dealloc方法中调用timer的invalidate方法,来解除runloop对timer的强引用,进而释放timer对象。
iOS之NSTimer循环引用的解决方案前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几种解决NSTimer的几种循环引用。 原因 当你在ViewC...