2013-02-14 86 views
0

完整性檢查。鑑於此:點符號 - 屬性/方法

@property (readwrite, nonatomic) NSDate *start; 

那麼這兩行代碼是不是相同?

版本1:

self.start.description 

版本2:

[self.start description] 

即start.description調用start對象上的description方法。

回答

1

是的。兩種情況下的結果都是相同的。屬性(大部分)只是圍繞用傳統Cocoa風格編寫的訪問器方法的糖。

我說「主要」,因爲有一些微小的內部差異。屬性作爲元數據添加到Objective C類的運行時描述中。你可以通過一些思考找出已經聲明的屬性列表。該列表不同於以getter/setter風格命名的方法列表。

2

是的,他們是相同的,所以是[[self start] description]

2

基本上是肯定的。

圍繞財產有一個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管理,而直接使用實例變量處理內存管理時由您完成。

+0

感謝您的編輯。我的一個愚蠢的錯誤。 :) – 2013-02-14 11:27:27