作为@property的NSDate给了我bad_exc_access

时间:2012-05-29 13:11:09

标签: iphone ios nsdate

我想初始化一个具有特定日期的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

为什么?

1 个答案:

答案 0 :(得分:3)

要将变量作为属性进行访问,您需要将其作为

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

否则,它只是对存储它的变量进行直接赋值。当您在使用retain时调用的自动生成的setMyDate函数中将属性声明为self.myDate = someDate;时,对传入的对象进行retain调用是为了抓住物体。

一般而言,最佳做法是仅通过自动生成的方法或self.myDate方法访问您的属性,以确保正确使用引用计数功能