我正在将项目转变为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
答案 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;
}