Проблемы с NSTimer: неправильная логика? - PullRequest
1 голос
/ 22 января 2012

Здесь у меня есть что-то вроде:

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 Ответ

3 голосов
/ 22 января 2012

Вы используете статическую переменную NSTimer, что означает, что для всех экземпляров вашего класса имеется только один указатель timer.Первый экземпляр, который получает -start вызываемый, затем устанавливает цель таймера на себя, а остальные ничего не делают, потому что timer больше не nil.

You 'мне придется использовать ивар для указателя timer, я не понимаю, почему это должно быть проблемой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...