Iphone 如何在objective-c中取消NSTimer计划
我正在应用程序中使用嵌套的NSTimer。我这里有两个问题Iphone 如何在objective-c中取消NSTimer计划,iphone,objective-c,static,timer,Iphone,Objective C,Static,Timer,我正在应用程序中使用嵌套的NSTimer。我这里有两个问题 如何在此函数中重新启动时间计数器-(void)updateLeftTime:(NSTimer*)计时器 如何终止前一个计时器,因为计时器也在调用计时器 要重置计时器时,请添加以下行 [tmLeftTime invalidate]; tmLeftTime = nil; 你也可以使用 if ([tmLeftTime isValid]){ // the timer is valid and running, how about in
-(void)updateLeftTime:(NSTimer*)计时器
要重置计时器时,请添加以下行
[tmLeftTime invalidate];
tmLeftTime = nil;
你也可以使用
if ([tmLeftTime isValid]){
// the timer is valid and running, how about invalidating it
[tmLeftTime invalidate];
tmLeftTime = nil;
}
用一个计时器代替3个怎么样
- (void)viewDidLoad {
[super viewDidLoad];
tmLeftTime=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
}
- (void)updateLevel {
static int count = 1;
count += 1;
lblLevel.text = [NSString stringWithFormat:@"%d", count];
tfLeftTime.text=[NSString stringWithFormat:@"%d",ANSWER_TIME];
[self playMusic];
}
- (void)updateLeftTime:(NSTimer *)theTimer {
static int timeCounter=1;
timeCounter+=1;
tfLeftTime.text=[NSString stringWithFormat:@"%d", (ANSWER_TIME-timeCounter)];
if (timeCounter >= ANSWER_TIME) {
timeCounter = 0;
[self updateLevel];
}
}
使用updateLevel:方法中的Invalidate方法使计时器无效,并重新安排相同的计时器
[tmLevel invalidate];
tmLevel = [NSTimer scheduledTimerWithTimeInterval:20.0f target:self selector:@selector(updateLevel:) userInfo:nil repeats:YES];
如果你想调用updateTimeLeft:方法,你不需要分配另一个计时器,这是一个很大的漏洞,因为你从来没有释放过那些引用
tmLeftTime = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
在updateTimeLeft中:只需重新安排计时器的方法,并设置一个应该停止的条件
tmLeftTime = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
- 使用
取消计时器的计划[tmLevel invalidate]
- 不要忘记在之后立即设置
(避免在运行循环未计划和释放计时器后使用变量)tmLevel=nil
- 在失去对tmLevel计时器的引用之前,不要忘记使其无效,即在将新的NSTimer分配给tmLevel变量之前调用
(否则,除新的计时器外,上一个计时器将继续运行)[tmLevel invalidate]
tmLeftTime=[[NSTimer alloc] init];
tmLeftTime=[NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLeftTime:) userInfo:nil repeats:YES];
在这里分配一个NSTimer实例,将该实例存储在tmLeftTime
中。。。然后立即忘记这个创建的实例,将其替换为另一个实例,该实例是使用[NSTimer scheduledTimerWithTimeInterval:…]创建的。
!
因此,使用[[NSTimer alloc]init]
创建的NSTimer将丢失,并且正在创建泄漏(因为它永远不会被释放)
你的第一句话完全没用,有点像你在做的
int x = 5;
x = 12; // of course the value "5" is lost, replaced by the new value
哦我明白了,但实际上我还处于中级阶段,所以代码不合适,我必须在完成一个等级后恢复它,而一个等级有20个问题。完成一个等级后,我必须展示一个广告。因此,我必须以这种方式重新启动它。多谢各位
int x = 5;
x = 12; // of course the value "5" is lost, replaced by the new value