使用ARC时的条件编译

时间:2011-12-09 14:41:46

标签: iphone objective-c automatic-ref-counting conditional-compilation

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

@protocol ProtocolA

@required
-(void)protocolMethodOne

@optional
-(void)protocolMethodTwo;

@end

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

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

@protocol ProtocolA

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

@optional
-(void)protocolMethodTwo;

@end

1 个答案:

答案 0 :(得分:14)

您应该执行#if __has_feature(objc_arc)在启用ARC的情况下,这将扩展为1。

这是来自Clang的ARC docs