NSTimer的问题:错误的逻辑?

时间:2012-01-22 12:34:03

标签: objective-c

在这里,我有类似的东西:

void start() { for (id i in something) { [i start]; } }
void finish() { for (id i in something) { [i finish]; } }

static NSTimer *timer = nil;

@implementation aClass
- (void)start {
    if (!timer) timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(change) userInfo:nil repeats:YES];
}

- (void)change { /* ... */ }
- (void)finish { [timer invalidate]; }
@end

请注意,我无法使用ivars,因为您可以假设有很多aClass个实例调用了-start

我认为我在这里遇到了我自己的逻辑问题,因为只有一个实例(第一个被-start调用)同时被-change调用。这不是其他实例的问题,因为如果我从something数组中删除第一个对象,那么第二个对象就会没问题,而其他对象则会遇到问题。

我只是犯了一些明显的错误? (我想我是;试图为每个实例使用相同的全局......)。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您正在使用静态NSTimer变量,这意味着您的所有类实例只有一个timer指针。调用-start的第一个实例会将计时器的目标设置为自身,其他的则不会执行任何操作,因为timer不再是nil

你必须使用ivar作为timer指针,我不明白为什么这应该是一个问题......