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方法,至此问题解决!