У меня есть ошибка памяти, которая, кажется, сводится к тому, что происходит в потоке. У меня проблемы с устранением неполадок.
У меня есть UIViewController, который, когда active , т. Е. Пользователь использует его представление, получает обновления из веб-службы в NSThread.
Это делается каждые 3 минуты, и эта задержка контролируется:
[self performSelector:@selector(timerDone) withObject:nil afterDelay:180.0];
Метод timerDone
теперь запускает NSThread, который извлекает данные веб-службы, а также снова отправляет сообщение performSelector
. Это небольшая «проверка обновлений, заполнение представлений, завершение работы и повторение», которая работает просто отлично.
Теперь пользователь, конечно, может внезапно нажать кнопку и загрузить второй UIViewController. Когда это происходит, я звоню:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(timerDone) object:nil];
И сделайте мою уборку по методу dealloc
.
Теперь у меня вопрос: что произойдет, если NSThread работал, когда пользователь изменил представление и запустил деконструкцию этого объекта, который является начальной точкой NSThread?
Должен ли я хранить BOOL, который говорит мне, если NSThread все еще активен, и если да, что делать с NSThread, если это так.
Потоки выполняются так:
- (void) runTimer {
[self performSelector:@selector(timerDone) withObject:nil afterDelay:180];
}
- (void) timerDone {
[self performSelector:@selector(runTimer) withObject:nil afterDelay:2];
[NSThread detachNewThreadSelector:@selector(updateAllVisibleElements) toTarget:self withObject:nil];
}
- (void) updateAllVisibleElements {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//call approiate web service
[pool release];
}