我只是想知道是否仍然应该使用@synthesize,即使Xcode自动为属性做了,只是因为它已经这样做了这么久?或者这是否意味着我们都可以停止使用@synthesize(除非你有理由给它的实例变量一个不同的名字)?
我只想确保从专业的角度来看,我符合良好的编码习惯。
答案 0 :(得分:9)
我个人不再使用合成仅限新开发 ,除非必要(请参阅下面的lnafziger评论)。原因是因为我目前正在为iOS 6开发,它需要新版本的Xcode,它具有在编译期间自动包含@synthesize
的功能。如果我使用旧代码执行此操作,我的组织中可能仍有人使用旧版本的Xcode(即版本4.2),这会导致问题。
因此,根据您是否仍需要与旧版Xcode兼容,这个答案会有所不同。但是如果你只需要使用新版本的Xcode,你应该没有声明@synthesize
。
答案 1 :(得分:2)
要直接回答您的问题,我认为,跳过@synthesize
并非不专业。假设你出于某些原因不需要它(我会谈到这一点),我认为编写更少和更清晰的代码更专业。 @synthesize
只是噪音。
在某些情况下,您可能会考虑它:
注意:虽然您可能关心32位OS X,但我甚至不确定Apple是否会接受现在4.0之前针对iOS的应用程序。当然,你真的会限制自己。
@synthesize
的语言搜索了一个边缘案例。 (至少有一个这样的情况,与类别有关。)如果你点击这个,@synthesize
那一个变量并继续前进。不要回去@synthesize
一切。-Weverything
,您将收到有关此问题的编译器警告。 -Weverything
包含所有内容,包括一些警告,提示我认为不明智的更改。这是其中之一。找到适当的警告开关将其关闭(它在警告消息中)并执行此操作。 :)
另见:
答案 2 :(得分:1)
如果您对使用_propertyName
合成的ivar感到满意,您可以安全地摆脱合成语句。如果你想要将你的ivar命名为其他东西,你需要像这样包含它
@synthesize propertyName = ________cool_ivar_name
答案 3 :(得分:1)
对此,确实没有全面正确的答案。除了其他答案给出的指定技术原因(例如将一个替代的ivar名称绑定到属性)之外,我觉得与代码保持一致是最重要的。如果您使用的是在整个地方都使用@synthesize
的旧库,那么您可能希望以一致性的名义坚持使用它。否则,如果你重新开始并采用较不冗长的方法,请尽可能省略@synthesize
。我个人喜欢不那么详细的代码,但我更重视代码的一致性,特别是在浏览数千行代码时。