要在一個類本身內觸發合成存取器,您必須使用self
。如果您不這樣做,則直接繞過訪問器方法訪問該屬性的地址。你需要:
NSString *abc = @"Hardik";
[self.array addobject:abc];
NSLog(@"array = %@", self.array);
這個很重要的原因是合成的方法通常也會初始化屬性。該合成方法陣列的內部看起來是這樣的:
-(NSArray *) array{
if (array!=nil) {
return array;
}
array=[[NSMutableArray alloc] initWithCapacity:1];
return array;
}
self.propertyName
實際上只是[self propertyName]
和self.propertyName=someValue
速記僅僅是[self setPropertyName:someValue]
簡寫。
,直到調用self.array
至少一次,數組屬性沒有初始化。
但是,只是爲了混淆事情,一旦您初始化後調用了self.array
,那麼您可以直接調用array
。所以...
[self.array addObject:abc];
NSLog(@"array = %@", array);
...工作,而逆向會返回一個空的數組。
所以規則是:
- 在一個類實現 (包括子類),稱只是
propertyName
給你的財產的地址 但不調用 的的getter/setter存取方法。
- 在一個類實現 (包括子類),使用
self.propertyName
調用 的getter/setter存取方法,但 不直接訪問屬性。
- 來自課外 的實現例如
myClass.propertyName
調用 getter/setter訪問器方法。