我刚刚开始使用Objective-C,我需要澄清一些事情
当@synthesize @property时,通常会做以下事情:
@interface Class : ParentClass
@property propertyName
@end
@implementation
@synthesize propertyName = _propertyName;
@end
我看到很多问题和答案表明“_propertyName”被广泛接受为合成属性的“正确”方法。但是,它是否符合任何目的?或者仅仅是为了提高可读性和识别实例变量?
答案 0 :(得分:2)
如果你意外地离开了“自我”,它就会成功。你得到一个很好的编译错误,而不是默默地没有调用你的方法。
答案 1 :(得分:1)
您可以自定义合成实例变量名称
如前所述,可写属性的默认行为是 使用名为_propertyName的实例变量。
如果您希望为实例变量使用其他名称,则为您 需要指导编译器使用。来合成变量 在您的实现中遵循以下语法:
@implementation YourClass @synthesize propertyName = instanceVariableName; ...... @end
此外:
注意:编译器将自动合成实例变量 在所有情况下,它也合成至少一个访问者 方法。如果为读写实现getter和setter 编译器将使用属性或只读属性的getter 假设您正在控制属性实现 并且不会自动合成实例变量。如果你还是 需要一个实例变量,你需要请求一个 合成:@synthesize property = _property;
答案 2 :(得分:0)
通过这样做,生成的访问者实际上知道要使用哪个变量(iVar)。
答案 3 :(得分:0)
是的,它增加了可读性和安全性。也将私人和私人分开。要了解的公共变量&使用。 Class的私有变量通常以“ propertyName”格式编写。您可以说它是一种编码约定,其中私有变量名称使用''作为前缀,Public变量或属性名称是lowerCamelCase。