-1

我刚开始使用 Objective-C,我需要澄清一些事情

当我 @synthesize 一个 @property 时,通常的约定是执行以下操作:

@interface Class : ParentClass

@property propertyName

@end

@implementation

@synthesize propertyName = _propertyName;

@end

我已经看到很多问题和答案表明“_propertyName”被广泛接受为合成属性的“正确”方式。但是,它有任何用途吗?或者仅仅是为了增加可读性和识别实例变量?

4

4 回答 4

2

这样做是为了如果你不小心离开了“自我”。你会得到一个很好的编译器错误,而不是默默地不调用你的方法。

于 2013-07-03T05:04:28.623 回答
1

来自http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html

您可以自定义合成的实例变量名称

如前所述,可写属性的默认行为是使用名为 _propertyName 的实例变量。

如果您希望为实例变量使用不同的名称,则需要指示编译器在您的实现中使用以下语法来合成变量:

@implementation YourClass @synthesize propertyName = instanceVariableName; ... @结尾

还:

注意:编译器将在所有情况下自动合成实例变量,其中它还合成了至少一个访问器方法。如果您为读写属性实现了 getter 和 setter,或者为只读属性实现了 getter,编译器将假定您正在控制属性实现并且不会自动合成实例变量。如果您仍然需要一个实例变量,则需要请求合成一个:@synthesize property = _property;

于 2013-07-03T05:12:27.153 回答
0

通过这样做,生成的访问器实际上知道要使用哪个变量(iVar)。

于 2013-07-03T05:08:40.093 回答
0

是的,它增加了可读性,还分离了私有和公共变量以供理解和使用。Class的私有变量一般写成“ propertyName”格式。可以说这是一种编码约定,私有变量名使用' '作为前缀,公共变量或属性名使用小驼峰式。

于 2013-07-03T05:19:58.713 回答