我在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