-2

我试图学习如何在 iOS 编程中使用属性。我只是想和这里的人核实一下我得到的是否正确?

说我有财产

@interface Person : NSObject

@property NSString *firstName;

@end

在实施中

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

这样,

a) 一个名为:的实例变量firstName被创建

b)每当我想在我的类中使用属​​性时,我都会调用self.firstName(或 setter/getter)

c)我可以像这样在 init 方法中初始化属性:

-(id) init {
 ...
 self.firstName=@"SomeText";
 ... 
 }

我相信我上面提到的观点是正确的,对吧?

4

1 回答 1

4

尽管您的@property声明中遗漏了一些内容,但您所说的几乎是正确的。您至少需要一个属性属性,例如strongorcopyassign。对于可能是可变的字符串,我们通常使用copy来确保字符串不能在我们下面被修改。所以@property (copy) NSString *firstName有关此的更多详细信息,请参阅此答案

大多数人nonatomic也通过在生成的 getter/setter 中禁用线程同步来提高性能。有关更多信息,请参阅此答案

有些人建议不要在init方法中使用属性访问器(更喜欢直接 ivar 访问),因为子类可能已经覆盖了 setter/getter,并且在对象完全初始化之前可能无法正常工作。实际上,您很少需要担心这一点,所以很多人忽略了这个建议。

使用最新版本的 Xcode,您也不必@synthesize手动添加 - 下划线前缀的实例变量(_firstName在您的示例中)将自动为您合成。

于 2013-07-25T11:46:55.197 回答