ARCは、ファイル-fno-objc-arcをマークしているにもかかわらず、構造体または和集合内のObjective-Cオブジェクトを禁止していますか?なぜそうなのですか?
-fno-objc-arcとマークすれば、この制限はないと思いました。
回答:
このメッセージが表示された場合は、__ unsafe_unretainedを試してください。構造体のオブジェクトが保持されていない場合にのみ安全です。例:ARCでOpenFeintを使用する場合、クラスOFBragDelegateStringsは構造体でこのエラーを示します。
typedef struct OFBragDelegateStrings
{
NSString* prepopulatedText;
NSString* originalMessage;
} OFBragDelegateStrings;
に
typedef struct OFBragDelegateStrings
{
__unsafe_unretained NSString* prepopulatedText;
__unsafe_unretained NSString* originalMessage;
} OFBragDelegateStrings;
NSArray
どうなりますか?その場合、すぐに割り当てが解除されることはありませんが、コンパイラは何を言うのだろうか(今はテストできません)...
むしろ使用するよりも構造体を、あなたが作成することができObjective-Cのクラスを代わりにデータを管理します。
これは、arcが構造体または和集合内のオブジェクトを追跡できないためです(オブジェクトはその時点でプレーンCポインターであるため)。
問題のファイル/クラスにマークを付けたとしても、 -fno-objc-arc
アークによって制御されるオブジェクトをパラメータとして渡す可能性があり、メモリリークが発生する可能性があります。
-fno-objc-arc
プロジェクト内でARCファイルと非ARCファイルを混在させるために使用できますが、構造体や共用体などのプレーンなC構造体を使用している場合は、ARCをまったく使用できません。