私はこの中にnsthread、whileループを持っています。メインメソッドの「スレッドセーフ」キューからオブジェクトを取得しています。このnsthreadオブジェクトを含むUIViewControllerを離れるとき、私はnsthreadキャンセルメソッドを呼び出しますが、それは "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;
}
}
ありがとう!
ありがとう、私はそれを試してみましょう。 –
謝辞をありがとう!私はあなたがNSThreadを理解するために書いたこの素敵なデモとデータをキューに入れる方法を使用しました。誰もが今GCDを指摘していますが、NSThread 'do it by hand'オプションを覚えておくことが重要だと思います。 – LEO