NSTimer对Target的强引用
这是一个老坑,虽然app发生错误后经过一些调试很快定位到NSTimer,还是觉得有必要记录下。
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo
其中,API文档中清楚地解释到:
The object to which to send the message specified by aSelector when the timer fires. The timer maintains a strong reference to target until it (the timer) is invalidated.
在实际运用中,target往往是当前的调用者,比如一个ViewController。这样就形成了一个经典的循环引用问题,导致当前的ViewControler始终无法释放。
解决之道
对于Timer要始终牢记手动invalidate,并且不能在dealloc中进行invalidate。
Comments