为什么下面的代码崩溃了?注释代码不会崩溃。
@property (retain) NSDate *lastCurrentDate;
...
@synthesize lastCurrentDate;
- (void)viewWillAppear:(BOOL)animated {
BOOL crash = [lastCurrentDate isEqualToDate:[NSDate date]]);
}
- (void)viewDidDisappear:(BOOL)animated {
//lastCurrentDate = [[NSDate date] retain];
lastCurrentDate = [NSDate date];
}
那么,为什么保留财产可能不会保留在Objective-C上?
答案 0 :(得分:2)
当您编写@synthesize lastCurrentDate
时 - 您还会创建名为“lastCurrentState
”的变量,当您编写lastCurrentDate = [NSDate date];
时,您可以直接访问此变量。应通过点:self.lastCurrentDate = ....;
在最后的xCodes中,您不需要编写合成 - 它会自动执行,但会创建以'_'前缀命名的变量。它等于:@synthesize variable = _variable;
答案 1 :(得分:2)
使用self.lastCurrentDate = [NSDate date]
。因为当您使用self.lastCurrentDate
时,它将通过setter
方法进行分配。您通过retain属性声明了vaiable,因此您的setter方法将执行两个操作assign
和retain
。
答案 2 :(得分:1)
因为您直接分配给实例变量,而不是使用 属性访问方法:
self.lastCurrentDate = [NSDate date];