在什么条件下,Objective-c中的@synthesis是自动的?

在什么条件下,Objective-c中的@synthesis自动?

也许在使用LLVM 3.0及更高版本时?从网上的阅读来看,似乎从Xcode 4开始就不需要@synthesis。但是,当我没有合成属性时,我使用的是Xcode 4并收到警告

对为什么不'自动合成的属性似乎意味着@synthesis在某些情况下在某些时候可以省略

另一个(旧)参考暗示@synthesis可能在将来的某个时候是自动的

截至clang 3.2(约2012年2月),“;“默认合成”;默认情况下,将提供Objective-C属性的(或“自动属性合成”)。这与你最初读到的博文中描述的基本相同:http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/ (除了那篇文章将该功能描述为“启用,然后禁用”,我不知道这是Xcode的问题,还是clang开发人员自己在这个问题上来回奔波)

据我所知,在clang 3.2中,属性不会被默认合成的唯一情况是,这些属性是从协议继承的。下面是一个示例:

#导入<基础/Foundation.h>
@P方案
@财产不挑剔;
@结束
@接口A:NSObject<P>
@财产随和;
@结束
@实施A
@结束
int main(){A*A=[A new];A.easygoing=0;A.finicky=1;}

如果编译此示例,将收到一条警告:

test.m:11:17:警告:自动属性合成将不会合成属性
在协议中声明[-Wobjc协议属性合成]
@实施A
^
test.m:4:15:注意:此处声明了属性
@财产不挑剔;
^
生成1个警告。

如果您运行它,您将从运行时得到一个错误:

objc[45820]:A:无法识别选择器转发::(转发setFinicky:)
非法指令:4

发表评论