2013-07-25 45 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

如果您只有一个实例变量,则根本无法使用点属性语法。 –

相关问题