NSTask
内からを起動しようとしているときに に遭遇しましたNSOperation
。
これは、問題を紹介するためにまとめた非常に単純なアプリです。ボタンをクリックすると、NSOperation
がキューに入れられます。をセットアップしNSRunLoop
、 を呼び出すメソッドを呼び出しますNSTask
。タスクは非常に単純です。2 秒間起動するだけ/bin/sleep
です (正常に動作しているときにスピナーを簡単に確認するのに十分な時間です)。
アプリは宣伝どおりに動作しますが、TaskPerformer.m の 23 行目をautorelease
, (申し訳ありませんが、私は新しい投稿者なので、直接リンクできません) に変更するか、完全にコメントアウトすると (NSTask
オブジェクトがリークします)、NSOperation
「 s スレッドは決して終了しません。メインの実行ループが何かをブロックしているようです。
さて、ここでの問題は 2 つあります。まず、スレッドがブロックされている理由がわかりませんが、さらに、このアプリケーションのガベージ コレクションをオンにすると、同じ動作が現れます。を手動で解放する方法がないためNSTask
、スレッドは何があってもブロックされます。
誰かが私に何が起こっているのか教えてくれたら、私は永遠に感謝します!