完整性檢查。鑑於此:點符號 - 屬性/方法
@property (readwrite, nonatomic) NSDate *start;
那麼這兩行代碼是不是相同?
版本1:
self.start.description
版本2:
[self.start description]
即start.description調用start
對象上的description
方法。
完整性檢查。鑑於此:點符號 - 屬性/方法
@property (readwrite, nonatomic) NSDate *start;
那麼這兩行代碼是不是相同?
版本1:
self.start.description
版本2:
[self.start description]
即start.description調用start
對象上的description
方法。
是的。兩種情況下的結果都是相同的。屬性(大部分)只是圍繞用傳統Cocoa風格編寫的訪問器方法的糖。
我說「主要」,因爲有一些微小的內部差異。屬性作爲元數據添加到Objective C類的運行時描述中。你可以通過一些思考找出已經聲明的屬性列表。該列表不同於以getter/setter風格命名的方法列表。
是的,他們是相同的,所以是[[self start] description]
基本上是肯定的。
圍繞財產有一個setter和getter autosynchoronizizsed。如果您使用@syncronize語句,那麼您有機會影響setter,getter和property的命名方式。如果您自動同步該屬性的名稱是_start。 getter名稱是start,setter名稱是setStart。
所以
something = self.start
實際調用getter和
self.start = something
調用的二傳手。 等價物:
something = [self start];
[self setStart:something];
如果你想直接訪問實例變量,然後通過這樣做:
_start = something;
something = _start;
在您剛剛使用@synthesize start;
事件,則相當於將是:
start = something;
something = start;
這可能會令人困惑,但start
實際上是對實例變量的地址,而self.start
使用二傳手/吸氣。當你不ARC時,這種差異非常重要。根據屬性參數(例如分配,複製,保留...)自動生成的getter和setter爲您執行一些memeory管理,而直接使用實例變量處理內存管理時由您完成。
感謝您的編輯。我的一個愚蠢的錯誤。 :) – 2013-02-14 11:27:27