为什么@synthesize变量名以_开头?

时间:2013-07-03 05:02:22

标签: objective-c

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

当@synthesize @property时,通常会做以下事情:

@interface Class : ParentClass

@property propertyName

@end

@implementation

@synthesize propertyName = _propertyName;

@end

我看到很多问题和答案表明“_propertyName”被广泛接受为合成属性的“正确”方法。但是,它是否符合任何目的?或者仅仅是为了提高可读性和识别实例变量?

4 个答案:

答案 0 :(得分:2)

如果你意外地离开了“自我”,它就会成功。你得到一个很好的编译错误,而不是默默地没有调用你的方法。

答案 1 :(得分:1)

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

  

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

     

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

     

如果您希望为实例变量使用其他名称,则为您   需要指导编译器使用。来合成变量   在您的实现中遵循以下语法:

     

@implementation YourClass @synthesize propertyName =   instanceVariableName; ...... @end

此外:

  

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

是的,它增加了可读性和安全性。也将私人和私人分开。要了解的公共变量&使用。 Class的私有变量通常以“ propertyName”格式编写。您可以说它是一种编码约定,其中私有变量名称使用''作为前缀,Public变量或属性名称是lowerCamelCase。