我正在试图更详细地介绍Objective-C编程语言。Objective-C实例变量访问器方法
现在我有一个关于在设置数值时调用[self]
的问题。
苹果的文件说:“如果你不使用的自我。你直接访问实例变量。(......)”
因此,假设我有一个具有可变NSString *name
实例的狗对象。
我创建像这样的实例变量设定器,而无需使用[self]
关键字:
(void)setName:(NSString *)_name
{
name = _name;
}
当我替代地使用[自]关键字创建一个setter它看起来像这样:
(void)setName:(NSString *)_name
{
self->name = _name;
}
在主要方法中,我创建一个新的狗对象并设置并返回其名称值:
Dog *myDog = [[Dog alloc] init];
myDog.name = @"Yoda";
NSLog(@"name of the dog: %@", myDog.name);
在这两种情况下,我都会得到尤达的回报值。但是在技术上,有没有[self]的实例变量调用之间的区别在哪里?是不是我使用setter方法调用相同的变量(内存)?
谢谢,第一部分我很清楚。我不明白你为什么'保留'setter中的'name'对象。我猜想我只需要setter中的'name'对象,并且在将它分配给实例变量'_name'后,它可以被释放,而'_name'应该被保留以备后用? – MrBr 2012-07-31 11:13:06
@MrBr这一切都取决于您是否使用自动引用计数(ARC)。如果你是那么你不必担心,你的版本会好起来的。 – trojanfoe 2012-07-31 11:17:47