是否可以在Build Phases的编译源中添加“fno-objc-arc”而不启用非弧文件?

是否有可能以某种方式处理非弧文件而无需在构建阶段将fno-objc-arc添加到编译源? 更具体地说,有没有办法在代码中的某处添加fno-objc-arc ? 原因是,我想开源我的库之一,它使用非弧文件,我不希望使用我的库的人手动添加fno-objc-arc 。 只需拖放……

不。但是,如果你看看一些库做了什么,他们会写有条件地调用MRC调用的宏,例如, releaseautorelease等,这取决于用户是否正在使用ARC进行编译,例如使用__has_feature(objc_arc)测试。 然后代码使用这些宏,而不是标准releaseretainautorelease调用。 仔细实施后,您就可以拥有一个支持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