2013-07-25 85 views
-2

我想了解如何在iOS編程中使用屬性。 我只想在這裏與人們覈對,如果我得到的是正確的?如何在Obj中使用屬性C

說我有一個屬性

@interface Person : NSObject 

@property NSString *firstName; 

@end 

實施

@implementation XYZPerson 
@synthesize firstName; 
... 
@end 

由此,

一)的實例變量命名爲:firstName創建

B) 每當我想用我的類中的財產,我打電話self.firstName(或setter /吸氣)

三)我可以初始化在init()方法的屬性是這樣的:

-(id) init { 
... 
[email protected]"SomeText"; 
... 
} 

我相信點我如上所述,是正確的,對嗎?

+0

是的,正確的!有關更多信息,請參閱Apple文檔http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html – 2013-07-25 11:44:28

+0

還有一件事,請記住在init方法中使用@NSString ' – 2013-07-25 11:47:10

+0

[我是否可以在實現中使用\ _property或self.property](http://stackoverflow.com/questions/12791851/do-i-use-property-or-self-property-in-implementation) –

回答

4

你說的是非常正確的,雖然你錯過了@property聲明中的一些東西。您至少需要屬性屬性,如strongcopyassign。對於可能會變化的字符串,我們通常使用copy來確保字符串不能從我們下面修改。所以@property (copy) NSString *firstNameSee this answer for more details about this

大多數人也使用nonatomic以通過禁用生成的getters/setters中的線程同步來提高性能。 See this answer for more information

有些人建議不要在init方法中使用屬性訪問器(更喜歡直接ivar訪問),因爲子類可能已經覆蓋了setter/getter並可能無法正常工作,直到對象完全初始化。實際上你很少需要擔心這個,所以很多人都會忽視這個建議。

使用最新版本的Xcode,您也不必手動添加@synthesize - 將自動爲您合成帶下劃線前綴的實例變量(在您的示例中爲_firstName)。

+1

+1擊敗我。 – Abizern

+0

嗨邁克,謝謝。我只是喜歡上面的方法,所以如果沒關係,我想我會主要使用它(我理解你對複製的評論等)。最後的事情。如果我只有一個實例變量(沒有屬性) - 當它指向它時,我不需要在它之前使用'self'? (然而,對於屬性,我必須始終使用'self.propertyName?') – user2054339

+0

如果您只有一個實例變量,則根本無法使用點屬性語法。 –

相關問題