您在这里有两个选择:
将-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 结构更安全、更连贯且更易于使用。