This question already has answers here:
@property @synthesize

(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