我注意到一些代码示例使用以下语法:
@synthesize myProp = _myProp;
这与仅仅这样做有什么不同?
@synthesize myProp;
后来在代码中,他们通过这样做来调用它:
self.myProp = xyz;
为什么不这样称呼它呢?
mpProp = xyz;
有人可以解释这些差异吗?
我注意到一些代码示例使用以下语法:
@synthesize myProp = _myProp;
这与仅仅这样做有什么不同?
@synthesize myProp;
后来在代码中,他们通过这样做来调用它:
self.myProp = xyz;
为什么不这样称呼它呢?
mpProp = xyz;
有人可以解释这些差异吗?
你的问题有两个部分。
Usingself.myProp = xyz
调用属性的 setter 来设置数据,而不是直接赋值myProp = xyz
。建议通过 setter 和 getter 访问和修改数据,甚至是私有或内部数据。正如@SplinterReality 在他的回答中提到的那样,它们为您提供了一种处理与数据相关的问题的方法。但相关问题可能不止于此,例如:
延迟加载
- (SomeObject *) myProp {
if(_myprop == nil) {
_myProp = [[SomeObject alloc] init];
}
return _myProp;
}
做一些相关的动作注意:这也可以由 KVO 来处理。这更简单。
- (void) setProperty:(SomeObject *)object (
_property = object;
id relatedProperty = //Contruct related value here.
self.relatedProperty = relatedProperty;
[self updateViewThatShowsPropertyContent];
}
Using@synthesize
用于创建属性的默认设置器和获取器,即您不会为它们提供自定义实现。
@synthesize myProp = variableName;
将生成的实例变量命名为_variableName
. 但默认行为是生成一个名为_property
for的实例变量@property property
。所以@synthesize myProp = _myProp;
并@synthesize myProp;
没有什么不同。
但是,在现在使用的现代 Objective-C 中,@synthezie
不需要它,即它是为你调用的。因此,除非您需要提供除默认名称之外的实例变量,否则您不需要调用它。
这样做的主要优点是您在访问属性时使用了 getter 和 setter。这很重要,因为:
第一个原因对 ARC 来说不太重要,但后者仍然是一个很大的好处。