我正在尝试执行我认为是一项简单的任务。我有一些需要启动和停止的重复计时器。
我创建了启动和停止计时器的方法,并尝试将计时器作为参数传递给方法。
问题在于计时器似乎永远不会停止。任何想法为什么这可能无法正常工作?谢谢!
文件顶部:
#import "ViewController.h"
NSTimer *launchTimer;
NSTimer *transactionTimer;
启动方法:
-(void) startingMethod {
NSString *urlString = @"http://google.com";
[[AsynchRequestService sharedInstance]
performAsynchronousURLRequest:urlString completion:^(BOOL success,
NSString *responseBody, NSString *responseStatus) {
if (success) {
[self stopResponseTimer:launchTimer];
}
else {
[self startResponseTimer:launchTimer
method:@selector(startingMethod)
interval:10];
}
}];
}
启动计时器的方法:
-(void)startResponseTimer:(NSTimer *) timer method:(SEL) method
interval:(int) interval {
[timer invalidate];
timer = nil;
timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self
selector:method userInfo:nil repeats:YES];
}
停止计时器的方法:
-(void)stopResponseTimer:(NSTimer *) timer {
NSLog(@"STOP TIMER");
[timer invalidate];
timer = nil;
}
答案 0 :(得分:1)
使startResponseTimer
和`stopResponseTimer'获取指向对象指针intead的指针。
-(void)startResponseTimer:(NSTimer **) timer method:(SEL) method
interval:(int) interval {
[*timer invalidate];
*timer = nil;
*timer = [NSTimer scheduledTimerWithTimeInterval:interval target:self
selector:method userInfo:nil repeats:YES];
}
-(void)stopResponseTimer:(NSTimer **) timer {
NSLog(@"STOP TIMER");
[*timer invalidate];
*timer = nil;
}
然后像
一样调用它[self startResponseTimer:&launchTimer];
[self stopResponseTimer:&launchTimer];
这应该确保您保留正确的NSTimer对象。
NOTE:It is always a good idea to check a pointer to a pointer to an object for NULL in a public method