使用ARC时的条件编译

Fre*_*eer 7 iphone objective-c conditional-compilation automatic-ref-counting

有没有办法询问编译器是否打开ARC,然后根据该值有条件地编译?例如,我有一个协议:

@protocol ProtocolA

@required
-(void)protocolMethodOne

@optional
-(void)protocolMethodTwo;

@end
Run Code Online (Sandbox Code Playgroud)

如果我使用ARC,我想protocolMethodA在使用ARC时可选,并且在不使用ARC时需要.这是因为使用此方法的主要原因之一是取消分配对象实例.

话虽如此,这就是我想要发生的事情:

@protocol ProtocolA

#ifdef SOME_ARC_VARIABLE
    @optional
#else
    @required
#endif
-(void)protocolMethodOne

@optional
-(void)protocolMethodTwo;

@end
Run Code Online (Sandbox Code Playgroud)

Jos*_*erg 14

你应该这样做#if __has_feature(objc_arc)在启用ARC的情况下,它将扩展为1.

这来自Clang 的ARC文档.