----问题由自己解决,信息在我的评论更新----的dealloc在[超级的dealloc]
打了两次电话和崩溃我有具有周期性的NSTimer视图控制器。我所说的计时器无效当我删除视图控制器:
- (void)dealloc
{
NSLog(@"dealloc called");
if ([myTimer isValid]) {
[myTimer invalidate];
}
[super dealloc];
}
我发现了一个意外的行为,该[myTimer无效]将立即打电话给我的视图控制器的dealloc。这就是为什么我把isValid检查以避免崩溃。但[超级dealloc]将被调用两次,并崩溃应用程序。
因此,我有两个问题:
什么是无效的定时器的正确方法?
为什么计时器的无效方法调用视图控制器的dealloc方法?
感谢
利奥
您应该在viewDidUnload下放置无效语句以避免崩溃。 –
这听起来像是一些奇怪的行为。是否还有其他的对象持有对你的视图控制器的引用 - 如果没有,有没有可能,一旦定时器被从NSRunLoop中移除并释放,视图控制器就不再引用它了(所以被解除分配)? – Stuart
@studev,你是对的。我只是认为视图控制器被错误地发布在这个代码的一面。计时器的无效将释放目标,但目标的dealloc不应该是呼叫。而保留计数应该从2减少到1.因为当我安排定时器时,计时器保留了目标。 – leo