假设我有一个实例变量NSDate * date;我做(例如在viewDidLoad中):
date = [NSDate dateWithTimeIntervalSinceNow:0];
或
self.date = [NSDate dateWithTimeIntervalSinceNow:0];
这两者有区别吗?如果哪一个是正确的,可能是为什么:)
Thanx的答案 拉吉斯拉夫
答案 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并保留其属性,它不是自动释放的对象,我们应该明确地发布日期