1

我想用特定日期初始化一个 nsdate ,以便在我的所有代码中使用它,我正在这样做:

。H

@property (nonatomic, retain) NSDate *myDate;

.m

@synthesize myDate;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd"];

        myDate = [formatter dateFromString:@"2050-01-01"];
    } 
    return self;
}

然后在代码中,如果我以这种方式读取 nsdate:

NSLog(@"%@",myDate);

或者如果我使用 isEqualToDate,请给我一个 exc_bad_access

为什么?

4

1 回答 1

3

为了将变量作为属性访问,您需要将其调用为

self.myDate = [formatter dateFromString:"2050-01-01"];

否则,它只是对存储它的变量进行直接分配。当您retain在自动生成的setMyDate函数中声明一个属性时,当您对传入的对象使用调用时调用self.myDate = someDate;该函数retain是为了保留该对象。

self.myDate通常,仅通过自动生成的方法或通过确保正确使用引用计数函数的方法来访问您的属性被认为是最佳实践

于 2012-05-29T13:13:32.157 回答