0

我看到有人写这样的代码

@interface SomeClass:<NSObject>{
       NSString * _iVar;

}

@property(nonatomic,retain)NSString *iVar;

并在实施文件中

@synthesize iVar = _iVar;

但我总是喜欢这样写代码:

@interface SomeClass:<NSObject>
@property(nonatomic,retain)NSString *iVar;

并在实施文件中

@synthesize iVar = _iVar;

它们都工作正常,我可以使用一个实例 someClass 来获取 iVar“someClass.ivar”。我只知道为什么?

4

2 回答 2

0

您现在甚至不必再合成 iVar。最新的 Xcode 将自动为每个属性创建一个支持实例变量,属性名称带有下划线前缀。

于 2013-03-02T06:12:15.690 回答
0

在 Objective-C 中,当您通过“。”使用任何东西时。(点语法),它正在访问属性。您已经声明并合成了一个名为 iVar 的属性,因此您可以使用 someClass.iVar 访问它。

当您声明一个属性时,会自动使用它创建一个变量。因此,即使您不创建变量,它也会在那里。

为了避免歧义,人们正在创建具有不同名称的属性和 iVar。因此,他们可以识别是否正在使用变量或正在使用属性。在这种情况下,人们让编译器知道一个特定的变量与一个属性相关联的低方式:

@synthesize iVar = _iVar;

如果你想直接在类之外访问变量而不是属性,你应该使用“->”(箭头语法)。

于 2013-03-02T06:19:21.917 回答