20

Paul Hegarty コースの iOS 5 チュートリアルに従って、GCD の使用方法を示すアプリでこのコードを確認します。どうやら GCD にはリリースが必要なようです。これは、マルチスレッドに関係する問題が原因で、まだ必要なオブジェクトがいくぶん予測できないためです。

  dispatch_async(dowloadQueue, ^{
    ....
    // do some stuff
   ....
    });
  dispatch_release(dowloadQueue);

iOS 6 および XCode 4.5 にアップグレードしましたが、「ARC は明示的なリリースを禁止しています ...」というメッセージが表示されます。

このコードは iOS5 / XCode 4.2 では試していません。

これは、ARC がより賢くなり、GCD でリリースする必要がなくなったからですか? それとも私が誤解しただけですか?

4

1 に答える 1

29

Mountain Lion と iOS 6.0 をターゲットにすると、ARC がディスパッチ キューとその他の GCD タイプを管理します。OS X または iOS の以前のバージョンを対象とする場合でも、GCD 型を明示的に保持および解放する必要があります (スレッド セーフの理由だけでなく、そうしないとメモリ リークが発生します)。ただし、これは新しい OS のみを対象とする場合に処理されます。バージョン。

これが、iOS 6.0 を対象とする場合に ARC でこのようなコンパイラ エラーが表示される理由です。

于 2012-10-04T17:42:58.657 に答える