我有一个Xcode 4.5.1。我想将此项目转换为ARC以提高性能。我正在执行这些步骤。
Edit-> Refactor->转换为Objective C ARC 但得到错误:
ARC禁止结构或联合中的Objective-C对象。
答案 0 :(得分:6)
这里有两个选项:
将-fno-objc-arc
标志添加到您不想转换为ARC的文件中,但当然您无法转换它们,否则它将无法编译,在最好的情况下,并且在最坏的情况下会出现大量泄漏之一。
转换所有类并使用C结构中的Objective-C对象解决问题。
关于第二种解决方案,您还有两个选择:
用完全成熟的对象替换C结构并让ARC为您处理内存
继续使用C结构并将它们的对象标记为__unsafe_unretained
,这基本上会告诉ARC忽略这些对象以进行内存管理。因此,你会有类似的东西:
typedef struct {
NSInteger anInteger;
__unsafe_unretained NSString * aString;
} AStruct;
这将在ARC下编译,它是将Objective-C对象保存在C结构中的唯一选择。请记住,ARC不会管理这些对象的内存,因此您已手动处理。
最重要的是,我的建议是将C结构转换为类。例如,您可以轻松地将上述结构转换为:
@interface AStructReplacement : NSObject
@property (nonatomic, assign) NSInteger anInteger;
@property (nonatomic, strong) NSString * aString;
@end
比C结构更安全,更连贯,更易于使用。
答案 1 :(得分:0)
target-project => build phases => compile sources => non-arc file => -fno-objc-arc(command)