根据苹果官方文档说明:使用NSTimer时,timer会自动retain一次target和userInfo参数。由此而导致可能在使用NSTimer时,出现UIViewController不能释放的问题。
问题代码示例:
XXX.h
......
@property(nonatomic, retain) NSTimer * timer;
......
XXX.m
......
self.timer = [NSTimer scheduledTimerWithTimeInterval: 0
target: self
selector: @selector(tokenViewDown:)
userInfo: parmDict
repeats: YES];
......
如果想要销毁xxx, 则必须先将timer置为失效,否则xxx就一直占用内存而不会释放。造成逻辑上的内存泄漏。该泄漏不能用xcode及instruments测出来。
另外对于要求必须销毁xxx的逻辑处理,如果xxx包含以上代码,并且未将timer置为失效,则会造成app中同时存在多个xxx的实例。可能在notification处理等方面,造成意料之外的现象。
解决办法:在明确需要销毁的代码前,将timer置为失效:
[xxx.timer invalidate];
[xxx release];