ARCを使用するクラスAと、使用しない他のクラスBおよびCがあります。A にクラス B のオブジェクトが含まれ、B にクラス C のオブジェクトが含まれている場合、ARC はどのように機能し、クラス B および C でメモリ管理が適切に処理されないとどうなりますか?
2 に答える
ARC クラスでの非 ARC オブジェクトの統合は一般にシームレスに行われるという Mike と Martin に同意します ( -fno-objc-arc
ARC ではない、または でコンパイルされたライブラリにある .m ファイルにコンパイル フラグを追加したと仮定します)。手動参照カウント)。
注意点の 1 つは、ARC はBasic Memory Management Rulesで概説されているメソッド命名規則に準拠するコードに依存していることです。したがって、ARC 以外のコードは、これらのメソッドの命名規則に準拠する必要があります。そうしないと、ARC が結果のオブジェクトを正しく処理できない可能性があります。非 ARC コードが長年のメソッド命名規則 ( alloc
、new
、 、copy
で始まるメソッドmutableCopy
は +1 オブジェクトを返し、それ以外の場合はメソッドから返されるautorelease
オブジェクトはオブジェクトになります) に従っている場合、これは問題になりません。問題。ただし、非 ARC コードがこのメソッド命名規則に従っていない場合、この非 ARC コードを ARC クラスに統合するときにメモリ管理の障害になる可能性があります。
非 ARC コードがこれらの命名規則に準拠していない場合は、メソッドの名前を変更するか、メソッド名に対応するようにコードのメモリ管理を修正するか、コードがこれらに準拠していないコンパイラにヒントを提供する必要があります。メソッドの命名規則 (NS_RETURNS_RETAINED
または などNS_RETURNS_NOT_RETAINED
)。
ARC が行うことは、コードを見て、オブジェクトを解放する場所、autorelease などを想定することです。コンパイル時に、retain、release、retainCount、autorelease、または dealloc のすべてのメソッドがコードに追加されます。これにより、非アーク コードがアーク コードと完全に互換性を持つようになります。
不適切なメモリ管理については、ビルド時に静的アナライザーを使用して、できるだけ多くのエラーを取得してください。
これが役に立てば幸いです、乾杯!