純粋な ARC コーディングの経験があります。コンパイラの機能として、必要に応じて適切な保持/解放呼び出しを配置する Objctive-C メソッド ファミリを尊重します。
alloc
、mutableCopy
、で始まり、新しいオブジェクトcopy
を作成するすべてのメソッド。new
それらは保持カウントを増やします。結果として、ARC は必要がなくなったときにすべてのポインター (およびそれに関連付けられたオブジェクト) を解放します。
命名規則に従わないメソッドを記述すると、問題が発生する可能性があると思います。たとえばnewCustomer
、最初のバージョンでは自動解放されたオブジェクトを返し、2 番目のバージョンでは返さないようなメソッドを記述した場合、何が起こるでしょうか?
特に、私の質問は次のとおりです (同じ理由に属します)。
- 呼び出し元と呼び出されたコードの両方が ARC でコンパイルされている場合はどうなりますか?
- (a)呼び出しコードが ARC でコンパイルされ、呼び出しコードが非 ARC でコンパイルされるとどうなりますか?
- (b)呼び出されたコードが ARC でコンパイルされているのに、呼び出しコードが非 ARC でコンパイルされている場合はどうなりますか?
ARCが内部でどのように機能するかを示す回答をいただければ幸いです(objc_release
、objc_retainAutoreleasedReturnValue
など)。
前もって感謝します。