Objective-C 是 @synthesize 是必需的还是可选的?
Posted
技术标签:
【中文标题】Objective-C 是 @synthesize 是必需的还是可选的?【英文标题】:Objective-C is @synthesize required or optional? 【发布时间】:2013-03-25 01:06:49 【问题描述】:对不起,我是一个新手 ios 开发人员,最近我听说 @synthesize 现在在某个 Xcode 版本中是 @synthesize 并且编译器会自动合成和属性并将 _ 分配给私有变量。
我已经测试过了:
没有@synthesize,您可以使用
访问属性和私有字段self.property_name = something;
_property_name = something; //(used in getter and setters)
使用@synthesize property_name,您可以使用
访问属性和私有字段self.property_name = something;
property_name = something;
我的问题是我们真的需要@synthesize 了吗?还是我错过了一个更大的故事?
【问题讨论】:
如果您在大多数情况下不使用@synthesize
,最新版本的编译器将为您提供。我刚刚在这里写了关于属性的文章:***.com/questions/15493882/…
见***.com/questions/11666008/…
取决于月相,更重要的是,您使用的是哪个版本的 Xcode。
【参考方案1】:
不,从 Xcode 4.4 开始,我们不需要这样做,它添加了一个名为 Default Synthesis Of Properties 的功能。
简单地说,它会自动生成:
@synthesize name = _name;
【讨论】:
警告:如果你覆盖所有自动生成的方法,这一行将不会自动生成(但你仍然可以自己编写来获取变量)。此外,协议中定义的属性不会自动合成(相反,您会收到编译器警告)。最后,NSManagedObject
的子类也禁用了这种行为,因为它在很大程度上是不受欢迎的。
这个答案太简单地说。有关详细信息,请阅读此帖子:Automatic Property Synthesis With Xcode 4.4
另一个警告:如果您在协议中声明了属性,它们将需要合成。
所以你只需要/必须在你想重命名标题中声明的属性时使用它。【参考方案2】:
除非你一直像我一样使用它,否则你仍然需要它,据我所知:
在.h中:
@property int32_t FwdID;
在.m:
@synthesize FwdID;
类内使用:
FwdID = 0;
据我所知,如果您希望使用默认值,您必须输入 _FwdID = 0;在代码中,这对我来说看起来很丑。
所以如果你像我一样(打破了我假设的所有标准编码约定),你仍然需要使用综合。
【讨论】:
你应该通过 getter 和 setter[self setFwdID:0];
访问属性,否则使用真实的实例变量而不是属性。以上是关于Objective-C 是 @synthesize 是必需的还是可选的?的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C中的@property和@synthesize用法
Objective-c 中的 @property 和 @synthesize
Objective-C中的@property和@synthesize用法
Objective-C基础笔记@property和@synthesize