Если вы хотите иметь возможность отменить таймер, вам нужно обратиться к таймеру, который вы отменяете, а это значит, что вы должны держать указатель на таймер рядом, см. ответ Джастина.
Сохранение ссылки на таймер — правильный способ сделать это, но для полноты вы также можете использовать метод -performSelector:withObject:afterDelay:
в качестве таймера бедняка. Этот вызов может быть признан недействительным с помощью +cancelPreviousPerformRequestsWithTarget:
. Образец кода:
- (void) viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(timerTick) withObject:nil afterDelay:10];
}
А потом:
- (void) viewWillDisappear
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[super viewWillDisappear];
}
Но это неправильный способ сделать это, потому что могут быть другие запросы селектора выполнения, ожидающие вашего объекта, которые вы бы отменили. Лучше всего держать таймер рядом, чтобы вы точно знали, что отменяете.
Кстати, запускать таймер в -viewDidLoad
тоже наверное плохая идея. Загрузка представления может произойти в любое время, независимо от отображаемого представления.
person
zoul
schedule
30.08.2012
scheduledTimerWithTimeInterval
. - person sch   schedule 30.08.2012