保持指向NSTimer的强大指针不起作用

时间:2013-11-19 10:05:03

标签: ios nstimer invalidation

我遇到了 NSTimer 的问题。从方法调用以下代码,它创建一个NSTimer并将其设置为实例变量self.syncDelay。调用方法结束时检查计时器是否有效的if语句。

但是,当我在计时器用完之前再次调用此方法时,方法顶部的if语句不会被调用。我猜,这就是 [self.syncDelay invalidate]; 不会使计时器失效的原因。

我的属性定义为: @property(非原子,强)NSTimer * syncDelay;

我正在寻找的功能是在计时器用完并创建新计时器之前第二次调用该方法时,计时器无效。从而有效地重置计时器。

编辑:当第二次调用该方法时,NSTimer为零。这很奇怪,因为我正在强烈指向它。

else {
    if ([self.syncDelay isValid]) {
        NSLog(@"Timer valid at start of method");
    }

    [self.syncDelay invalidate];

    self.syncDelay = nil;

    NSInvocation *timerInvocation = [NSInvocation invocationWithMethodSignature:
                    [self methodSignatureForSelector:@selector(testMethod:)]];
    // configure invocation
    [timerInvocation setSelector:@selector(testMethod:)];

    [timerInvocation setTarget:self];

    [timerInvocation setArgument:&className atIndex:2];   // argument indexing is offset by 2 hidden args

    self.syncDelay = [NSTimer scheduledTimerWithTimeInterval:10
                                            invocation:timerInvocation
                                            repeats:NO];

    if ([self.syncDelay isValid]) {
        NSLog(@"Timer valid at end of method");
    }
}

1 个答案:

答案 0 :(得分:0)