0

在 interface 部分设置 readonly 属性时,这会“禁用”该属性的 setter 方法。我需要澄清一下:

  1. 如果我们可以使用 _propertyName 设置只读属性,那么它的意义何在?
  2. 如果我们的属性是可读写的,何时使用 _propertyName?

  3. 此外,我了解我们使用 setter 方法进行一定程度的抽象,而不仅仅是使用 _propertyName 分配值。还有其他不使用 _propertyName 的理由吗?

下面是一些示例代码。谢谢你。

接口部分

@property (nonatomic, readonly) NSString *licensePlate;
@property (nonatomic, readonly) NSString *bodyColor;

实施部分

-(id) initWithCarFeatures {
    self = [super init]
    if (self) {
        _licensePlate = @"XSHJDS8687";
        _bodyColor = @"blueColor";
    }
    return self;
}
4

1 回答 1

2
  1. 重点是“封装”。没有其他文件可以直接设置该属性。该属性只能从给定的文件中设置,例如,使用init或使用专门的方法。

  2. 大多数人会告诉您,您应该_property只在init方法中直接使用dealloc(如果您不使用 ARC),当然,如果您正在实现自己的 setter 和 getter。即使属性被声明为readonly,通常你readwrite在类扩展中声明它。因此,它将保留readonly在其他文件中,但将保留readwrite在声明它的实现文件(类)中。

  3. 许多原因,例如“继承” - 设置器可以被覆盖。对于copy属性,复制由 setter 处理。使用 MRC(不是 ARC),setter 更加重要(它们处理保留和释放)。

于 2014-01-07T22:09:38.843 回答