Objective-C是@synthesize必需还是可选的?

Cha*_* Wu 33 objective-c ios

抱歉,我是一名新手iOS开发人员,最近我简要地听说@synthesize现在是某个版本的Xcode中的@synthesize,并且编译器将自动合成和属性并将_分配给私有变量.

我测试了这个:

如果没有@synthesize,您可以使用访问属性和私有字段

self.property_name = something;
_property_name = something; //(used in getter and setters)
Run Code Online (Sandbox Code Playgroud)

使用@synthesize property_name,您可以使用访问属性和私有字段

self.property_name = something;
property_name = something;
Run Code Online (Sandbox Code Playgroud)

我的问题是我们真的需要@synthesize了吗?还是有一个我错过的更大的故事?

Jam*_*hen 54

不,我们不需要像Xcode 4.4那样那样做,它增加了一个名为Default Synthesis Of Properties的功能.

简单地说,它会自动生成:

@synthesize name = _name;
Run Code Online (Sandbox Code Playgroud)

  • 警告:如果覆盖所有自动生成的方法,则不会自动生成此行(但您仍可以自行编写以获取变量).此外,协议中定义的属性不会自动合成(而是会收到编译器警告).最后,"NSManagedObject"的子类也禁用了这种行为,因为它很大程度上是不受欢迎的. (15认同)
  • 这个答案也是*太简单了.有关详细信息,请阅读以下文章:[使用Xcode 4.4进行自动属性合成](http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) (4认同)
  • 另一个警告:如果你在协议中声明了属性,它们将需要合成. (3认同)