Я запускаю свои анимации в UITAbleViewCell.
Каждая ячейка имеет свою собственную анимацию, и ячейки можно использовать повторно.
Я использую [mView performSelectorInBackground:@selector(layoutSubview) withObject:nil];
Там в фоновом потоке я запускаю runLoop для выполнения таких задач:
- (void)startAnimation
{
NSRunLoop *mLoop = [NSRunLoop currentRunLoop];
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
mRunLoop = YES;
while (mRunLoop == YES && [mLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]);
}
и остановите это:
- (void)stopAnimation
{
if (![NSThread isMainThread]) {
[[NSThread currentThread] cancel];
}
mRunLoop = NO;
self.animationTimer = nil;
CFRunLoopStop(CFRunLoopGetCurrent());
}
У меня возникают проблемы при быстрой прокрутке таблицы, потому что при первой инициализации ячейки я начинаю анимацию, поэтому происходит первый вызов runLoop, который выполняет setNeedDisplay и все методы из него. Но перед завершением первого цикла runLoop ячейка исчезает из представления и уже доступна для повторного использования. Поэтому я начинаю очищать его, пока цикл все еще выполняет операции, и здесь я встречаюсь с ситуациями вроде
сообщение отправлено на освобожденный экземпляр
Так, не могли бы вы дать мне несколько советов, как мне правильно прекратить выполнение операций в этом потоке? Я имею в виду, если я хочу повторно продать, например, объект, который выполняет некоторые действия, как немедленно остановить их?
Надеюсь, я дал достаточно информации.
Спасибо
ОБНОВЛЕНИЕ: Нет идей вообще?