12

Xcode プロジェクトで問題が発生しています。

私はこれらの行を持っています:

typedef struct
{
    NSString *escapeSequence;
    unichar uchar;
}

そして、私はこのエラーが発生しています:

ARC は、構造体または共用体での Objective-C オブジェクトを禁止します。

どうすれば修正できますか?

これが ARC にどのように違反しているかはわかりませんが、学びたいと思っています。

4

4 に答える 4

34

次のように変更します。

typedef struct
{
    __unsafe_unretained NSString *escapeSequence;
    unichar uchar;
}MyStruct;

ただし、このドキュメントの Apple ルールに従うことをお勧めします。

ARC が新しい規則を施行

C 構造体ではオブジェクト ポインターを使用できません。
構造体を使用する代わりに、Objective-C クラスを作成してデータを管理できます。

于 2013-02-09T04:37:10.083 に答える
8

最も安全な方法は、__unsafe_unretainedまたは を直接使用してから、およびCFTypeRefを使用することです。__bridge__bridge_retained__bridge_transfer

例えば

typedef struct Foo {
    CFTypeRef p;
} Foo;

int my_allocating_func(Foo *f)
{
    f->p = (__bridge_retained CFTypeRef)[[MyObjC alloc] init];
    ...
}

int my_destructor_func(Foo *f)
{
    MyObjC *o = (__bridge_transfer MyObjC *)f->p;
    ...
    o = nil; // Implicitly freed
    ...
}
于 2015-03-04T01:50:48.507 に答える
1

Objective C で ARC を有効にして C 構造を定義すると、「ARC は構造内の Objective-C オブジェクトを禁止しています」というエラーが表示されます。その場合、キーワードを使用する必要があります__unsafe_unretained

struct Books{

    NSString *title;
    NSString *author;
    NSString *subject;
    int book_id;
};

ARC 対応プロジェクトでの正しい使用方法:

struct Books{

    __unsafe_unretained NSString *title;
   __unsafe_unretained NSString *author;
   __unsafe_unretained NSString *subject;
   int book_id;
};
于 2016-10-12T15:00:53.580 に答える