私は探し回っていますが、ARC(+ iOS6)を使用しているときにコアグラフィックプリミティブ(CGMutablePathRef、CGPath、グラデーションなど)をリリースする必要がある場合の明確な答えは見つかりませんでした。
私はこれ(CGMutablePathRefオブジェクトのリリースに関するコンパイラの警告を黙らせる)と他のいくつかの質問を見てきましたが、それらは時代遅れであるか、完全に明確ではありません(少なくとも私には)。
私は探し回っていますが、ARC(+ iOS6)を使用しているときにコアグラフィックプリミティブ(CGMutablePathRef、CGPath、グラデーションなど)をリリースする必要がある場合の明確な答えは見つかりませんでした。
私はこれ(CGMutablePathRefオブジェクトのリリースに関するコンパイラの警告を黙らせる)と他のいくつかの質問を見てきましたが、それらは時代遅れであるか、完全に明確ではありません(少なくとも私には)。
はい。
大まかに言えば、NSObject
インスタンスのみがARCを介して処理されます。ARCは、必要に応じてrelease
/を追加するコンパイラメカニズムです。したがって、 ARC以外の場合に/をretain
使用できる場合にのみ適用されます。release
retain
malloc
これには、を介して割り当てられたメモリも、低レベルのフレームワーク(コアグラフィックス、コアオーディオなど)も含まれません。具体的には、低レベルのフレームワークを介して割り当てられたオブジェクトは、特定のメソッド(たとえば、CGImageRelease
など)を使用して解放する必要があります。
編集:
Core Foundationデータ型の非常に特殊なケースは、フリーダイヤルのブリッジ型です。ARC以前の世界では、対応するObjective-Cクラスが期待されるCFデータ型を安全に指定できます(たとえば、NSStringの代わりにCFString)。所有権のセマンティクスが明確でないため、ARCはこれを禁止しています。したがって、その所有権情報を指定するための一連のARCディレクティブを使用できます(詳細については、これを参照してください)が、CGPath
フリーダイヤルブリッジではない(CGPathリファレンスに記載されていないため)の場合はそうではありません。
ちなみに、すべてのARCの疑問に対する優れたリソースは、MikeAshのこの豊富な投稿です。