在这里,我有类似的东西:
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
数组中删除第一个对象,那么第二个对象就会没问题,而其他对象则会遇到问题。
我只是犯了一些明显的错误? (我想我是;试图为每个实例使用相同的全局......)。我该如何解决这个问题?
答案 0 :(得分:3)
您正在使用静态NSTimer变量,这意味着您的所有类实例只有一个timer
指针。调用-start
的第一个实例会将计时器的目标设置为自身,其他的则不会执行任何操作,因为timer
不再是nil
。
你必须使用ivar作为timer
指针,我不明白为什么这应该是一个问题......