- (void)start{
NSTimer *mtimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];
}
- (void)scheduleSomeNSTimer:(NSTimer *)timer{
NSTimer *newtimer = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(showAction:) userInfo:nil repeats:NO];
}
- (void)showAction:(NSTimer *)timer{
NSLog(@"action show!");
}
如果我想要使按功能调度的其中一个nstimer无效 - (void)addSomeNSTimer:(NSTimer *)timer
应用程序将重复创建newtimer,所以当我需要使其中一个newnstimer无效时,如何找到我需要的对象
例如:应用程序创建4个nstimers并在循环中运行如何找到其中一个并使其无效
答案 0 :(得分:2)
您应该在班级中保留对计时器的引用,并执行以下操作:
self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];
所以每当你想让它失效时,只需:
[self.myTimer invalidate];
答案 1 :(得分:1)
To_play
是NSTimer对象。
[To_play invalidate];
答案 2 :(得分:1)
您可以通过以下方式实现此目的:
根据您的反馈,请看下面的答案。
<。>在.h文件中,声明在Array:NSMutableArray * arrTimers;
<。>在.m文件中,在此数组中添加计时器,无论您在哪里创建计时器。NSTimer *mtimer = [[NSTimer alloc] init];
mtimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];
[arrTimers addObject:mtimer];
然后你可以像下面那样使它失效:
NSTimer *myTimer = (NSTimer *)[arrTimers objectAtIndex:1];
if(myTimer != nil)
{
[myTimer invalidate];
myTimer = nil;
}
我希望它能解决你的问题。
if(timer == mtimer)
{
if(mtimer != nil)
{
[mtimer invalidate];
mtimer = nil;
}
}
if(timer == newtimer)
{
if(newtimer != nil)
{
[newtimer invalidate];
newtimer = nil;
}
}
干杯。
答案 3 :(得分:0)
声明NSMutableArray并在您的scheduleSomeNSTimer方法中,将newtimer对象添加到数组中。当您使此数组中的计时器对象无效时,还需要将其从数组中删除。
答案 4 :(得分:0)
您可以在不保留对计时器的引用的情况下执行此操作。请改用旗帜。
@property(nonatomic, assign) BOOL invalidateTimer;
与Timer相关的源代码:
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scheduleSomeNSTimer:) userInfo:nil repeats:YES];
- (void)scheduleSomeNSTimer:(NSTimer *)timer
{
if(YES == invalidateTimer)
{
if([timer isValid])
{
[timer invalidate];
timer = nil;
}
}
}