10.6 以降の OS X 64 ビット システム用の ARC テクノロジを使用したプロジェクトを開発しています。
しかし現在、プログラムは 32 ビット 10.6 OS X システムをサポートする必要がありますが、32 ビット CPU では ARC が機能しません。
ARC をオフにして 32 ビット用にコンパイルしようとすると、多くのエラーが発生します。
ARC を使用するプログラムを手動メモリ管理を使用するプログラムに変換する最良の方法は何ですか?
10.6 以降の OS X 64 ビット システム用の ARC テクノロジを使用したプロジェクトを開発しています。
しかし現在、プログラムは 32 ビット 10.6 OS X システムをサポートする必要がありますが、32 ビット CPU では ARC が機能しません。
ARC をオフにして 32 ビット用にコンパイルしようとすると、多くのエラーが発生します。
ARC を使用するプログラムを手動メモリ管理を使用するプログラムに変換する最良の方法は何ですか?
32 ビット OS X 10.6 はガベージ コレクションをサポートしています。ARC コードを GC コードに、またはその逆に変換するのは非常に簡単です。たとえば、GC が NSMakeCollectible を必要とする一方で ARC が適切なブリッジ キャストを必要とする場合がいくつかあり、これらをマクロでカプセル化できます。
マクロを使用する場合は、ARC と GC のコンパイラ設定をテストし、それらに基づいて条件付きでマクロを定義できます。コンパイラ設定を変更すると、ARC と GC の間でコードが切り替わります。
必要に応じて、コードとretain
/release
オブジェクトを調べます。オブジェクトの各割り当てを調べて、いつ解放する必要があるかを確認する必要があります。また、自動リリースする必要があるものと、独自のものを作成する必要があるかどうか、autorelease pools
およびdrain
それらをいつ作成する必要があるかを確認する必要があります。これは、正しく実行したい場合に自動化できるものではありません。
また、両方を行うことを検討することもできます。サポートする 32 ビット ターゲットは ARC を使用せず、64 ビット ターゲットは使用します。これは多くの作業になりますが、おそらく変換以上のものではありません。これにより、はるかに大きなバイナリが生成されます (コードとリソース項目の比率によっては、おそらく 1.5 倍の大きさになります)。
より良い説明については、THIS SOの質問に対する最初の回答を確認してください。