2012-06-07 1 views
2

У меня есть определенный объект, который выполняет «Обновить» каждые 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]; 
} 
+1

Насколько я знаю, метод 'performSelector' сохраняет свой приемник и аргументы. –

+0

Это должен быть ответ, а не комментарий ... –

+0

ОК, я отвечу. –

ответ

2

Насколько я знаю, метод performSelector сохраняют свой приемник и аргументы.

+0

На данный момент я просто вернусь, как только я подтвержу это, или вы предоставите ссылку, подтверждающую его, я также буду принимать ответ –