У меня есть определенный объект, который выполняет «Обновить» каждые X секунд. («The Updater») То, как я делаю это повторяющееся обновление, - это вызвать performSelector:withObject:afterDelay
, а в моем селекторе я перепланирую при необходимости.Является ли объект, который вызывает performSelector: withObject: afterDelay сохраняется в NSRunLoop?
Конечно, у меня есть способ остановить эти призывы, позвонив по номеру cancelPreviousPerformRequests
.
Проблема в том, что этот «Updater» никогда не освобождается. Существует только один другой объект, сохраняя Updater (AFAIK) и объект стопорного является быть высвобождено и называют [self setUpdater:nil];
Я подозревал, что это что-то делать с методом performSelector:withObject:afterDelay
, но я не мог Не обращайтесь к этому вопросу в документации.
Может ли кто-нибудь подтвердить или отклонить его?
Спасибо!
ПРИЛОЖЕНИЕ Это те методы планирования:
-(void) scheduleProgressUpdate
{
[self stopProgressUpdates]; // To prevent double scheduling
[self performSelector:@selector(updateProgress)
withObject:nil
afterDelay:1.0];
}
-(void) updateProgress
{
// Perform update..
[self scheduleProgressUpdate];
}
-(void) stopProgressUpdates
{
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(updateProgress)
object:nil];
}
Насколько я знаю, метод 'performSelector' сохраняет свой приемник и аргументы. –
Это должен быть ответ, а не комментарий ... –
ОК, я отвечу. –