我的Xcode项目有问题.
我有这些线:
typedef struct
{
NSString *escapeSequence;
unichar uchar;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ARC禁止结构或联合中的Objective-C对象.
我该如何解决?
我似乎无法找到这是如何违反ARC的,但我很乐意学习.
bit*_*com 34
将其更改为:
typedef struct
{
__unsafe_unretained NSString *escapeSequence;
unichar uchar;
}MyStruct;
Run Code Online (Sandbox Code Playgroud)
但是,我建议遵循本文档中的 Apple规则.
ARC实施新规则
您不能在C结构中使用对象指针.
您可以创建一个Objective-C类来管理数据,而不是使用结构.
小智 7
最安全的方法是使用__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
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18169 次 |
最近记录: |