现在的位置: 首页 > 综合 > 正文

performSelector关于内存管理的执行原理是这样的

2013年06月07日 ⁄ 综合 ⁄ 共 449字 ⁄ 字号 评论关闭

performSelector关于内存管理的执行原理是这样的

执行 [self performSelector:@selector(method1:) withObject:self.obj afterDelay:3]; 的时候,系统会将tableLayer的引用计数加1,执行完这个方法时,还会将obj的引用计数减1

这个延时执行函数是被多次调用的,这时obj的引用计数没有减少到0,也就导致了dealloc方法没有被调用,出现了内存泄露。

所以最后我的解决办法就是取消那些还没有来得及执行的延时函数,代码很简单:
[NSObject cancelPreviousPerformRequestsWithTarget:self]
当然你也可以一个一个得这样用:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(method1:) object:nil]
加上了这个以后,切换场景也就很顺利地执行了dealloc方法,至此问题解决!

抱歉!评论已关闭.