2

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

4

1 回答 1

3

不。但是如果你看看一些库做了什么,他们编写的宏将有条件地调用 MRC 调用,例如 ,releaseautorelease,这取决于用户是否使用 ARC 编译,例如使用__has_feature(objc_arc)测试。然后代码使用这些宏,而不是标准的release, retain,autorelease调用。通过仔细实施,您可以拥有一个同时支持 ARC 和 MRC 的代码库。

例如,看看FMDatabase.hFMDB 库。实际上,您用这些宏替换您的 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
于 2013-06-12T23:12:50.000 回答