我在我的应用程序中使用了很多计时器。对于录制时间,移动物体,褪色等我在不同时间在同一视图中使用相同的计时器。我应该如何正确地宣布和宣布我的计时器?
Atm Im宣布这样的计时器:
fadeTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(bortInfo) userInfo:nil repeats:YES];
一旦我不使用它,我就这样做:
[fadeTimer invalidate];
fadeTimer = nil;
我离开视图时的保留计数在每个计时器上为0。我应该在dealloc中释放计时器吗?我的应用程序运行得非常好,但有时会崩溃。
我用于更新时间标签的clockTimer使用
[[NSRunLoop mainRunLoop] addTimer:clockTimer forMode:NSRunLoopCommonModes];
一旦我使clockTimer无效,我是否需要对此mainLoop做任何事情?
总而言之,请向我提供有关与计时器合作的一些信息。
非常感谢!
乔金姆
答案 0 :(得分:7)
你没有正确地保留你的计时器 - 如果你想再次参考它们你应该保留它们。我会使用属性(即头文件
)执行此操作@property (nonatomic, retain) NSTimer *fadeTimer;
并将您的代码更改为
self.fadeTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(bortInfo) userInfo:nil repeats:YES];
// Put this whenever you want to remove your timer and in your dealloc method.
[fadeTimer invalidate];
self.fadeTimer = nil;
这将确保您的对象保留您的计时器。否则你只需要希望计时器保持不变并且不会被iPhone自动释放。正如你所说它偶尔崩溃,这可能是原因;)
我担心我对运行循环知之甚少,但我很困惑为什么你不只是使用普通的NSTimer
来安排事情 - 为什么还要干扰与运行循环的交互呢?
答案 1 :(得分:3)
答案 2 :(得分:-1)
*also you can use and this is a better and optimize way to write this line
if (theTimer != nil) {
if([theTimer isValid]){
[theTimer invalidate];
}
theTimer = nil;
}*