为什么保留财产可能不会保留在Objective-C上?

时间:2013-04-19 12:51:00

标签: iphone ios objective-c properties retain

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

@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上?

3 个答案:

答案 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方法将执行两个操作assignretain

答案 2 :(得分:1)

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

self.lastCurrentDate = [NSDate date];