2011-09-05 18 views
1

你能告訴我這些自定義訪問器的含義是:爲什麼你會接着加入該信息給setter自定義訪問器和屬性中的「=」?

@property (assign,getter=isSelected) BOOL selected; 

以及有關二傳手,

@property (copy,setter=setDefaultTitle:) NSString* title; 

是這樣的與編寫@synthesize title = defaultTitle相同?

感謝

+0

不,因爲你正在改變** setter **方法。 –

回答

2
@property (assign,getter=isSelected) BOOL selected; 
在你的頭文件

,指定要其他類能夠使用myObject.isSelected訪問該屬性。您正在爲您的課程在公共界面中定義此名稱。


@synthesize title = defaultTitle; 
在實現文件

,指定您已經定義了一個名爲title其他類使用性質,但內部對你的類,你想實際使用的名稱defaultTitle。這通常是在您聲明自己的私人實例變量defaultTitle時完成的,您不希望人們直接修改它。

+0

在你的例子中,謝謝,defaultTitle不應該被修改,但我們可以做「myClass.title = smthg」這個工作嗎?讓變量defaultTitle爲私人,讓屬性標題公開是什麼意思? – Paul

+0

重點是強制使用getter和setter方法,以確保代碼在值被更改時運行。這樣,其他類可以使用該屬性,但不能簡單地對該值進行更改,而無需通過getter或setter。 –

+0

好的謝謝! – Paul

1

@property (assign,getter=isSelected) BOOL selected;

必須指定吸氣符合命名規則。見蘋果手冊引文:

通常應指定訪問是鍵值 編碼標準(見鍵 - 值編碼編程指南)-a共同 之所以採用吸氣裝飾是堅持以方法名 布爾值的isPropertyName約定。

@property (copy,setter=setDefaultTitle:) NSString* title; 這將是相同的,如果您還指定吸氣。您必須使用@synthesize title = defaultTitle;爲您的getter/setter方法生成正確的方法名稱。

+1

歡迎來到Stack Overflow。請閱讀[常見問題]。特別是,[不要使用簽名](http://stackoverflow.com/faq#signatures)(尤其是包含鏈接的鏈接,可能被視爲垃圾郵件)。如果您希望自己的姓名出現在帖子的底部,請在您的個人資料中更改您的用戶名。 – Gilles

+0

@ user929170:謝謝,所以它是完全一樣的東西吧?唯一的區別是,如果你打電話給「isSmthg」或只是「smthg」的財產? – Paul

+0

是的。另請參閱:[BOOL Obj-C的命名約定](http://stackoverflow.com/questions/806900/naming-conventions-for-bool-obj-c-2-properties) –