Xcode プロジェクトで問題が発生しています。
私はこれらの行を持っています:
typedef struct
{
NSString *escapeSequence;
unichar uchar;
}
そして、私はこのエラーが発生しています:
ARC は、構造体または共用体での Objective-C オブジェクトを禁止します。
どうすれば修正できますか?
これが ARC にどのように違反しているかはわかりませんが、学びたいと思っています。
Xcode プロジェクトで問題が発生しています。
私はこれらの行を持っています:
typedef struct
{
NSString *escapeSequence;
unichar uchar;
}
そして、私はこのエラーが発生しています:
ARC は、構造体または共用体での Objective-C オブジェクトを禁止します。
どうすれば修正できますか?
これが ARC にどのように違反しているかはわかりませんが、学びたいと思っています。
次のように変更します。
typedef struct
{
__unsafe_unretained NSString *escapeSequence;
unichar uchar;
}MyStruct;
ただし、このドキュメントの Apple ルールに従うことをお勧めします。
ARC が新しい規則を施行
C 構造体ではオブジェクト ポインターを使用できません。
構造体を使用する代わりに、Objective-C クラスを作成してデータを管理できます。
最も安全な方法は、__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
...
}
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;
};