detachNewThreadSelector
refとtoTarget
selfを使用して新しいスレッドを作成しています。
スレッドの目的は、動きをポーリングし、必要に応じて画像をロードすることです。オブジェクトに設定されているメインスレッドでアトミックブール値がtrueに設定されている場合にのみ、ループして終了しますdealloc
。
この問題は、(detachNewThreadSelectorリファレンスから)これが原因で発生します。
オブジェクトaTargetとanArgumentは、デタッチされたスレッドの実行中に保持され、その後解放されます
つまり、スレッドは継続的にポーリングするため、オブジェクトの保持カウントは常に(最小)1になります。dealloc
したがって、呼び出されることはありません。
だから私の質問は:ポーリングスレッドの存在を考慮に入れてオブジェクトの割り当てを解除するにはどうすればよいですか?
私が今持っている唯一のアイデアは、オブジェクトのdestroyThread関数を作成することです。これは、オブジェクトが破棄されると予想されるすべての場所から呼び出されるエンドスレッドブール値を設定します。これはエラーが発生しやすいようですが、より良い解決策はありますか?
前もって感謝します。
アップデート
私は別の解決策を考えました-保持カウントが1であるかどうかを検出するスレッドで-それが1である場合、スレッドがオブジェクトを存続させていることがわかっているので、ループを中断してdeallocが呼び出されます。これは堅牢なソリューションですか?