簡體   English   中英

使用訪問ivars。 符號

[英]Accessing ivars using the . notation

假設我有以下課程。

@interface MyObj : NSObject{
   int age;   
}

-(void) setAge: (int) anAge;
-(int) returnAge;
@end

@implementation MyObj

-(void) setAge:(int) anAge{
  age = anAge;
}

-(int) returnAge{
  return age;
}

如果然后我想給age變量賦值,我可以使用class方法在main中執行以下操作。

MyObj *newObj = [MyObj new];
[newObj setAge:18];

但是從亂七八糟的角度來看,我注意到我似乎能夠使用來直接訪問ivar。 符號。 我對此沒有任何警告或錯誤。

MyObj *newObj = [MyObj new];
newObj.age = 20;

兩者的最終結果似乎相同,但我覺得我不應該使用。 這樣可以直接訪問ivars的符號。

我應該對所有ivars使用getter和setter還是像這樣可以直接訪問它們?

謝謝

我個人避免聲明實例變量並直接訪問它們。 相反,我僅使用@property語句聲明屬性。 最近的Objective-C編譯器會自動引入其所屬的實例變量(自動綜合)。 除非您將此類屬性聲明為只讀或只寫,否則還會自動添加getter和setter。

使用屬性,我從不直接訪問實例變量,除非在實現時:

  • 其包含類的init方法
  • 覆蓋獲取器/設置器以檢索/存儲新值時
  • dealloc方法

在所有其他地方,我僅使用self.propertyName表示法引用該屬性。 這將隱式調用屬性的get和set方法。 這樣做的好處是,您可以稍后引入get和set方法,而無需修改現有代碼。

有一些好的樣式指南可以告訴您更多關於好的Objective-C代碼樣式的信息,例如:

暫無
暫無

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

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