【发布时间】:2011-05-18 00:39:02
【问题描述】:
这件事让我困惑了一段时间。
我有一个 NSTimer,添加到 currentRunLoop,如果我不保留它,它就会崩溃。
NSTimer *timer = [[NSTimer timerWithTimeInterval:60.0 target:self selector:@selector(tryUnion:) userInfo:nil repeats:NO] retain];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
我已经读过我不需要保留它,因为 NSRunLoop 的 addTimer 就是这样做的。
稍后我将失效并释放(如果我不保留上面,我不释放下面 - 这是崩溃的情况):
- (void) tryUnion:(NSTimer*)aTimer {
[aTimer invalidate];
[aTimer release];
}
我的问题是 1)如果可以在没有保留/释放的情况下完成我所做的事情,我应该怎么写。 2)分析标记这个或“计时器”中对象的潜在泄漏。如这里所写,是否存在泄漏的可能性,或者只是分析器不够聪明,无法知道计时器调用的函数中有释放?
【问题讨论】:
-
看起来我真正应该做的是:[NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(tryUnion:) userInfo:nil repeats:NO];没有运行循环调度,并且选择器中没有无效。是/没有人?我没有收到任何错误或分析器投诉。