是否有可能以某种方式处理非弧文件而不在构建阶段向编译源添加fno-objc-arc
?更具体地说,有没有办法在代码中的某处添加fno-objc-arc
?原因是,我想开源我的库之一,它使用非弧文件,我不希望使用我的库的人手动添加fno-objc-arc
。只需拖放......
答案 0 :(得分:3)
没有。但是如果你看看一些库做了什么,他们会写有条件地调用MRC调用的宏,例如release
,autorelease
等,这取决于用户是否正在使用ARC进行编译,例如使用__has_feature(objc_arc)
测试。然后代码使用这些宏,而不是标准的release
,retain
,autorelease
调用。仔细实施后,您就可以拥有一个支持ARC和MRC的代码库。
例如,查看FMDB库的FMDatabase.h
。实际上,您可以使用这些宏替换您的MRC调用,并且它们只会被有条件地包含在内,具体取决于项目是否使用ARC。
#if ! __has_feature(objc_arc)
#define FMDBAutorelease(__v) ([__v autorelease]);
#define FMDBReturnAutoreleased FMDBAutorelease
#define FMDBRetain(__v) ([__v retain]);
#define FMDBReturnRetained FMDBRetain
#define FMDBRelease(__v) ([__v release]);
#else
// -fobjc-arc
#define FMDBAutorelease(__v)
#define FMDBReturnAutoreleased(__v) (__v)
#define FMDBRetain(__v)
#define FMDBReturnRetained(__v) (__v)
#define FMDBRelease(__v)
#endif