我在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循环之前,单元格从视图中消失,并且已可供重用。于是,我开始清理它,而周期仍在进行操作,在这里我遇到像
消息的情况下发送到释放实例
所以,请你给我,我应该如何正确地停止一些提示在该线程中执行操作?我的意思是,如果我想举个例子来说明一个对象,这个对象正在执行一些如何立即停止他们的动作?
希望我给了足够的信息。 谢谢
更新:没有想法吗?
呃,除少数情况外,你不应该从任何地方向主线程发送消息给UIKit中的任何东西。 UITableViewCell不是线程安全的。 – 2011-12-19 22:11:55
Yeap我知道,我在主线程中执行的所有UIKit操作,但动画,石英动画(图表绘制)不在后台线程中。 – 2011-12-20 07:25:15
哦对。请原谅我无法阅读。 – 2011-12-20 15:06:12