Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否可以启用非arc文件而不添加;fno objc arc“;在编译构建阶段的源代码时?_Ios_Automatic Ref Counting - Fatal编程技术网

Ios 是否可以启用非arc文件而不添加;fno objc arc“;在编译构建阶段的源代码时?

Ios 是否可以启用非arc文件而不添加;fno objc arc“;在编译构建阶段的源代码时?,ios,automatic-ref-counting,Ios,Automatic Ref Counting,在构建阶段,是否可以在不向编译源添加fno objc arc的情况下以某种方式处理非arc文件?更具体地说,有没有办法在代码中的某个地方添加fno objc arc?原因是,我想打开一个使用非arc文件的库,我不希望使用我的库的人手动添加fno objc arc。只需拖放 否。但是如果您查看一些库的功能,它们编写的宏将有条件地调用MRC调用,例如,释放,自动释放,等等,这取决于用户是否使用ARC进行编译,例如使用\u has\u功能(objc\u ARC)测试。然后,代码使用这些宏,而不是标准的

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

否。但是如果您查看一些库的功能,它们编写的宏将有条件地调用MRC调用,例如,
释放
自动释放
,等等,这取决于用户是否使用ARC进行编译,例如使用
\u has\u功能(objc\u ARC)
测试。然后,代码使用这些宏,而不是标准的
释放
保留
自动释放
调用。通过仔细的实现,您可以拥有一个既支持ARC又支持MRC的代码库

例如,查看FMDB库的示例。实际上,您可以用这些宏替换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

它是一个编译器标志,而不是运行时标志,因此您只能在编译器中设置它,而不能在源代码中设置。