2

プロジェクトを ARC
に変換しています。プロジェクトで構造を使用しています。
ARCへの変換中にエラーが発生します

ARC forbids Objective-C objects in structs or unionsrk - type definition for struct

SOで検索したところ、__unsafe_unretained.Itを使用すると問題が解決することがわかりました。だから私は自分の構造でそれを使用しました。

typedef struct Grade{
  __unsafe_unretained NSString  *Table,
                                *RowId,
                                *ScheduleID,
                                *Level,
                                *Label,
                                *Thershold;

    char *CreateStmt;
} grade;

動作していますが、次の行に同じエラーが表示されてい*RowIdます。
私の質問は、すべての変数の前に __unsafe_unretained を配置する必要があるかどうかです。それは安全ですか?または、これを修正する別の方法があります。

4

1 に答える 1

2

ARC は構造体のオブジェクトを操作できません。技術的な理由がありますが、私はいつもそれを忘れています。__unsafe_unretained 修飾子を使用して構造体のこれらの要素の ARC を無効にすることができますが、メモリ管理がありません。自分の。オブジェクトを保持および解放するためのプライベート関数がいくつかありますが、それらはプライベートであるため、依存することはできず、apples app store で問題が発生する可能性があります。これを処理する最善の方法は、オブジェクト要素を含む構造体を持つ .m ファイルの ARC をオフにし (それらのファイルで -fno-objc-arc を使用)、そのファイル内のすべてのメモリ管理を手動で行うことです。カテゴリを使用して、手動で参照カウントを行うために必要なコードの量を減らすことができます。たとえば、クラス ファイルに対して ARC をオフにしてから、そのカテゴリの 1 つに対して ARC をオンにすることができます。

于 2013-03-18T06:27:45.547 に答える