我有一個nsthread,在這個之內的while循環。它從主方法的「線程安全」隊列中獲取對象。當我離開包含此nsthread對象的UIViewController時,我調用nsthread cancel方法,但它不會停止,因爲它被「queueLock」NSCondition鎖定。當我回到這個UIViewController時,會創建一個新的nsthread,並將這些對象組成隊列,但是前一個線程仍然退出,並且它們都嘗試使用隊列中的同一個對象,這會導致內存管理問題。我的問題是當我離開UIViewController時應該如何阻止這個線程。iOS - Objective-C - 如何在等待時停止NSThread?
NSThread主要方法:
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
while ([self isCancelled] == NO) {
RenderRequest *renderRequest = [queue get];
[self doRender:renderRequest];
[renderRequest release];
}
[pool drain];
這是隊列類的get方法:
- (id) get {
id toRet = nil;
[queueLock lock];
@try {
while ([queueContents count] == 0) {
[queueLock wait];
}
toRet = [queueContents lastObject];
[queueContents removeLastObject];
}
@finally {
[queueLock unlock];
return toRet;
}
}
謝謝!
謝謝,我會試一試。 – 2012-03-29 20:29:33
感謝您的寫作!我用這個很好的演示來了解NSThread以及如何排隊數據。雖然現在每個人都指向GCD,但我認爲記住NSThread'親手做'選項很重要。 – LEO 2013-09-15 01:58:34