我写了一个依赖于自动合成属性的 Mac + iOS 库。我有人尝试在 32 位下编译它,忽略一堆编译器警告,并在运行时获得无法识别的选择器。
由于如果不实现一堆 getter 和 setter,任何代码都无法工作,我宁愿用 a 来阻止它们#error
。
我以为我可以这样做:
#if !__has_feature(objc_default_synthesize_properties)
#error This library requires the modern runtime and will not compile under 32-bit
#endif
但它没有效果。
为了得到我想要的结果,我必须这样做:
#if !__has_feature(objc_default_synthesize_properties) || defined(__i386__)
#error This library requires the modern runtime and will not compile under 32-bit
#endif
我知道除了 32 位 Intel 架构之外还有其他实例会导致问题,例如旧版本的 Mac OS。
是否有更好的宏来检查自动合成属性或现代运行时的可用性?