你有大幅两个选项:
添加-fno-objc-arc
标志你不想转换成ARC的文件,当然你不能将它们转换否则将无法编译,在最好的情况,并在最糟糕的情况下泄漏。
转换所有类并解决C结构中Objective-C对象的问题。
关于第二个解决方案,您再有几个选项:
与成熟的对象替换C的结构,让ARC处理内存为您
继续使用C结构并将其中的对象标记为__unsafe_unretained
,它们基本上会告诉ARC忽略用于内存管理的那些对象。因此,你会碰到这样的:
typedef struct {
NSInteger anInteger;
__unsafe_unretained NSString * aString;
} AStruct;
这将ARC下编译,它是你必须保持一个C结构内Objective-C对象的唯一选择。请记住,ARC不会管理这些对象的内存,所以你已经手动处理它。
底线,我的建议是将您的C结构转换为类。举个例子,你可以轻松地将上面的结构为:
@interface AStructReplacement : NSObject
@property (nonatomic, assign) NSInteger anInteger;
@property (nonatomic, strong) NSString * aString;
@end
这是更安全,更连贯,更容易比C结构使用。
感谢转换为ARC工作得很好,但结构化对象没有保留价值,多数民众赞成为什么应用程序开始崩溃 – Archive
我明白将C结构转换为更安全的目标c类,但我使用了类似于typedef的第二个选项struct NS {int anInteger; __unsafe_unretained NSString * aString; } AStruct;因为它在整个项目中很难改变。 – Archive
你应该显示一些代码 –