Objective-Cでは、実行時に関連付けられたオブジェクトサポートを使用して、クラスにiVars /プロパティを追加できます。クラスエクステンションで宣言されたプロパティと関連するストレージの使用に違いはありますか?
LLVM 2では、クラス拡張に宣言することで、クラスにiVars /プロパティを追加できるようになりました。
2つの違いはありますか?私はLLVMがランタイムサポートをラップするだけの気がしますが、わかりません。
Objective-Cでは、実行時に関連付けられたオブジェクトサポートを使用して、クラスにiVars /プロパティを追加できます。クラスエクステンションで宣言されたプロパティと関連するストレージの使用に違いはありますか?
LLVM 2では、クラス拡張に宣言することで、クラスにiVars /プロパティを追加できるようになりました。
2つの違いはありますか?私はLLVMがランタイムサポートをラップするだけの気がしますが、わかりません。
私はこれらが2つの異なるメカニズムであると信じています。
壊れやすいABIの下では、関連付けられたオブジェクトサポートがインターフェイスを拡張する唯一の方法でしたが、関連するオブジェクトの追加リストを割り当てることによって実行時に動作します(私はそう信じています)。
しかし、LLVM 2では、クラス拡張でivarsを宣言できますが、脆弱ではないABIでしか動作しません(弱いABIで32ビットLeopardのコードをコンパイルしようとすると構文エラーが発生します)。
ここにはhow the non-fragile ABI worksを説明する記事があります。これには、コンパイル時とランタイムの両方のサポートが必要です。
"-fobjc-arcは壊れやすいabiでサポートされていません"というエラーが表示された場合、これは32ビットIntel用にコンパイルしようとしていることを意味し、ARCは64ビットIntelでのみサポートされます。 64ビットのみを対象にしてください。 –