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;
}
}
ありがとう!