簡體   English   中英

在readonly屬性之后進一步澄清_property?

[英]Further clarification of _property after readonly attribute?

在接口部分設置readonly屬性時,“禁用”屬性的setter方法。 我需要澄清一下:

  1. 如果我們可以使用_propertyName設置它,那么readonly屬性的意義是什么?
  2. 如果我們的屬性是readwrite,何時使用_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;
}
  1. 關鍵是“封裝”。 沒有其他文件可以直接設置屬性。 該屬性只能從給定文件中設置,例如,使用init或使用專門方法。

  2. 大多數人會告訴你,你應該只在init方法, dealloc (如果你沒有使用ARC)中直接使用_property ,當然,如果你正在實現自己的setter和getter。 即使該屬性被聲明為readonly ,通常readwrite在類擴展中聲明它為readwrite 因此,對於其他文件,它將保持readonly ,但是對於聲明它的實現文件(類)將進行readwrite

  3. 許多原因,例如“繼承” - 設置者可以被覆蓋。 對於copy屬性,復制由setter處理。 使用MRC(不是ARC),setter甚至更重要(它們處理保留和釋放)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM