【发布时间】:2015-10-07 15:44:20
【问题描述】:
如果不满足特定条件,我将设置一个计时器以在 30 秒后触发一个方法,否则计时器将失效。 这就是我正在做的 我正在创建这样的计时器属性
@property (nonatomic) NSTimer *timer;
现在我用某种方法像这样启动我的计时器
- (void) createAPIXML
{
if (_isGenerateRootTag) {
_root = (DDXMLElement *) [DDXMLNode elementWithName:[[MainViewController sharedViewController] rootElement]];
_isGenerateRootTag = FALSE;
}
dispatch_async(dispatch_get_main_queue(), ^{
_timer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(timerFireMethod) userInfo:nil repeats:NO];
NSLog(@"**************************STARTING THE TIMER %@**********************",_timer.description);
});
[self sendRequest];
}
现在,我继续进行验证,如果满足所有条件,我会通过类似这样的其他方法使我的计时器无效
NSLog(@"**************************KILLING TIMER %@ FROM VALIDATE RESPONSE METHOD**********************",_timer.description);
// Invalidate timer..
if (_timer != nil) {
[_timer invalidate];
_timer = nil;
}
如果不满足条件并且经过 30 秒,我的 timerFireMethod 将被调用
- (void)timerFireMethod
{
NSLog(@"Timer Methods Metho gor called with timer Instance %@",_timer.description);
}
这是一个间歇性问题,对我来说似乎是一种竞争条件,但确实会发生并导致很多问题.. 我在这里做错了什么需要您的专家建议.. 我被卡住了
【问题讨论】:
-
你在哪里调用 dispatch_async ?
-
我在我的一种定期调用的方法中使用它..
-
请也发布该方法。
-
您安排了许多计时器,但只存储一个并且只使一个无效。
-
确保只有在前一个计时器失效后才调用 dipatch _Async。
标签: ios objective-c timer nstimer