0

为什么下面的代码会崩溃?注释代码不会崩溃。

@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 上可能无法保留属性?

4

3 回答 3

2

当您编写时@synthesize lastCurrentDate- 您还创建了名为 ' lastCurrentState' 的变量,并且在您编写lastCurrentDate = [NSDate date];时直接访问此变量。属性应该通过点访问:self.lastCurrentDate = ....;

在最后的 xCodes 中,您不需要编写 synthesize - 它会自动完成,但会创建以 '_' 前缀命名的变量。它等于:@synthesize variable = _variable;

于 2013-04-19T13:05:35.377 回答
2

使用self.lastCurrentDate = [NSDate date]. 因为当您使用时self.lastCurrentDate,它将通过setter方法分配。您通过保留属性声明可变量,因此您的 setter 方法将执行两个操作,assign并且retain.

于 2013-04-19T13:07:51.470 回答
1

因为您直接分配给实例变量,而不是使用属性访问器方法:

self.lastCurrentDate = [NSDate date];
于 2013-04-19T13:03:47.527 回答