This question already has answers here:
@property @synthesize
(6个答案)
7年前关闭。
我注意到一些使用以下语法的代码示例:
这与仅执行此操作有何不同?
然后在代码中,他们通过执行以下操作来调用它:
为什么不这样称呼它呢?
有人可以解释差异吗?
执行一些相关操作注意:这也可以由KVO处理。这比较简单。
第2部分:
使用
但是,在当前使用的现代Objective-C中,不需要
(6个答案)
7年前关闭。
我注意到一些使用以下语法的代码示例:
@synthesize myProp = _myProp;
这与仅执行此操作有何不同?
@synthesize myProp;
然后在代码中,他们通过执行以下操作来调用它:
self.myProp = xyz;
为什么不这样称呼它呢?
mpProp = xyz;
有人可以解释差异吗?
最佳答案
您的问题分为两部分。
第1部分:
使用self.myProp = xyz
会调用属性的setter来设置数据,而不是直接分配myProp = xyz
。建议设置者和获取者访问和修改数据,甚至 private 或内部数据。它们为您提供了一种处理数据相关问题的方式,就像@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];
}
第2部分:
使用
@synthesize
可以创建该属性的默认设置方法和获取方法,即,您将不会为其提供自定义实现。@synthesize myProp = variableName;
将生成的实例变量命名为_variableName
。但是默认行为是为_property
生成一个名为@property property
的实例变量。因此@synthesize myProp = _myProp;
和@synthesize myProp;
没有区别。但是,在当前使用的现代Objective-C中,不需要
@synthezie
,即为您调用。因此,除非您需要提供默认名称以外的实例变量,否则无需调用它。关于ios - 我为什么要@synthesize myProp = _myProp?还有为什么要自我称呼它。在前? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17099344/
10-13 03:49