还应该使用@synthesize吗?

时间:2013-07-05 23:38:48

标签: objective-c

我只是想知道是否仍然应该使用@synthesize,即使Xcode自动为属性做了,只是因为它已经这样做了这么久?或者这是否意味着我们都可以停止使用@synthesize(除非你有理由给它的实例变量一个不同的名字)?

我只想确保从专业的角度来看,我符合良好的编码习惯。

4 个答案:

答案 0 :(得分:9)

我个人不再使用合成仅限新开发 ,除非必要(请参阅下面的lnafziger评论)。原因是因为我目前正在为iOS 6开发,它需要新版本的Xcode,它具有在编译期间自动包含@synthesize的功能。如果我使用旧代码执行此操作,我的组织中可能仍有人使用旧版本的Xcode(即版本4.2),这会导致问题。

因此,根据您是否仍需要与旧版Xcode兼容,这个答案会有所不同。但是如果你只需要使用新版本的Xcode,你应该没有声明@synthesize

答案 1 :(得分:2)

要直接回答您的问题,我认为,跳过@synthesize并非不专业。假设你出于某些原因不需要它(我会谈到这一点),我认为编写更少和更清晰的代码更专业。 @synthesize只是噪音。

在某些情况下,您可能会考虑它:

  1. 您需要与旧版(32位OS X)运行时或旧版iOS(4.0版)兼容。

      

    注意:虽然您可能关心32位OS X,但我甚至不确定Apple是否会接受现在4.0之前针对iOS的应用程序。当然,你真的会限制自己。

  2.   
  3. 您的产品是您希望其他开发人员能够使用旧版Xcode的源库。
  4.   
  5. 您需要使用旧版本的Xcode(4.4之前的版本)。
  6.   
  7. 您已经使用需要@synthesize的语言搜索了一个边缘案例。 (至少有一个这样的情况,与类别有关。)如果你点击这个,@synthesize那一个变量并继续前进。不要回去@synthesize一切。
  8.      请注意,如果您打开-Weverything,您将收到有关此问题的编译器警告。 -Weverything包含所有内容,包括一些警告,提示我认为不明智的更改。这是其中之一。找到适当的警告开关将其关闭(它在警告消息中)并执行此操作。 :)

    另见:

答案 2 :(得分:1)

如果您对使用_propertyName合成的ivar感到满意,您可以安全地摆脱合成语句。如果你想要将你的ivar命名为其他东西,你需要像这样包含它

@synthesize propertyName = ________cool_ivar_name

答案 3 :(得分:1)

对此,确实没有全面正确的答案。除了其他答案给出的指定技术原因(例如将一个替代的ivar名称绑定到属性)之外,我觉得与代码保持一致是最重要的。如果您使用的是在整个地方都使用@synthesize的旧库,那么您可能希望以一致性的名义坚持使用它。否则,如果你重新开始并采用较不冗长的方法,请尽可能省略@synthesize。我个人喜欢不那么详细的代码,但我更重视代码的一致性,特别是在浏览数千行代码时。