在特定代码行上禁用ARC

时间:2015-07-29 17:54:45

标签: ios objective-c clang automatic-ref-counting llvm

我正在将项目转变为ARC,但有一些代码只能在禁用ARC的情况下使用。我意识到 -fno-objc-arc 可用于基于每个文件禁用ARC。但是我想知道是否可以在每个功能的基础上禁用ARC。

我知道警告可以按行进行切换,例如

eval

ARC有类似的东西吗? (以下是我的假设想法)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Weverything"
// Code goes here
#pragma clang diagnostic pop

1 个答案:

答案 0 :(得分:3)

这是不可能的。您必须将非ARC代码移动到单独的文件中。如果这是Obj-C类中的代码,也许您可​​以将有问题的方法移动到一个类别。

编辑:

使用Objective-C ++可以解决Obj-C中ARC的一些限制。例如,您可以将Obj-C引用放在结构中。 (因为他们可以在C ++中使用deinitializers)

编辑:

此代码适用于我:

<强> test.h

#import <Foundation/Foundation.h>

struct Struct {
    id ref ;
    NSDate * date ;
};

<强> main.mm

#import "test.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        Struct a ;
        a.ref = [ NSObject new ] ;

        Struct * a2 = new Struct() ;
        a2->ref = [ NSObject new ] ;
        free( a2 ) ;
    }

    return 0;
}