对于实例变量,使用self.variable ='some value'只是变量='某个值'是否有区别?

时间:2011-03-08 09:10:54

标签: iphone objective-c ipad ios

假设我有一个实例变量NSDate * date;我做(例如在viewDidLoad中):

date = [NSDate dateWithTimeIntervalSinceNow:0];

self.date = [NSDate dateWithTimeIntervalSinceNow:0];

这两者有区别吗?如果哪一个是正确的,可能是为什么:)

Thanx的答案 拉吉斯拉夫

4 个答案:

答案 0 :(得分:4)

是。 self.date调用名为date的属性的setter,如果你在属性规范中给出了类似retain的东西,或者如果你提供了自己的访问器,则会调用它们。

除非您绝对确定,否则在大多数情况下使用self.date始终比使用日期更好。另请注意,目前的编译器允许您只使用自己的变量声明来解析属性并进行合成。它优于显式变量声明。如果你使用那个结构,只要你直接使用变量而不使用访问器就会遇到编译错误,这是一个很好的优势。

答案 1 :(得分:4)

是的,有区别。第一个只是将值赋给变量,而另一个赋值给属性,因此与写入相同:

[self setDate:[NSDate dateWithTimeIntervalSinceNow:0]];

例如,如果您已将属性定义为@property(retain) NSDate *date;,则默认实施(通过@synthesize date)将释放旧值并保留新值。您还可以提供自定义setDate:实施,并在分配日期时执行一些操作。如果您只是将值赋给变量,那么所有这一切都不会发生。

答案 2 :(得分:1)

通过声明self.date =某个值;你实际上正在做以下事情

if(date)[date release]; date = [somevalue retain];

答案 3 :(得分:1)

如果使用date = [NSDate dateWithTimeIntervalSinceNow:0];这里的日期是自动释放的对象。

但是如果使用self.date并保留其属性,它不是自动释放的对象,我们应该明确地发布日期