我有一个 nsthread,其中有一个 while 循环。它从 main 方法中的“线程安全”队列中获取对象。当我离开包含这个 nsthread 对象的 UIViewController 时,我调用了 nsthread cancel 方法,但它并没有停止,因为它被“queueLock”NSCondition 锁定。当我回到这个 UIViewController 时,将创建一个新的 nsthread 并从队列中获取对象,但是前一个线程仍然退出并且它们都尝试使用队列中的同一个对象,这会导致内存管理问题。我的问题是当我离开 UIViewController 时应该如何停止这个线程。
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;
}
}
谢谢!