我想初始化一个具有特定日期的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
为什么?
答案 0 :(得分:3)
要将变量作为属性进行访问,您需要将其作为
调用self.myDate = [formatter dateFromString:"2050-01-01"];
否则,它只是对存储它的变量进行直接赋值。当您在使用retain
时调用的自动生成的setMyDate
函数中将属性声明为self.myDate = someDate;
时,对传入的对象进行retain
调用是为了抓住物体。
一般而言,最佳做法是仅通过自动生成的方法或self.myDate
方法访问您的属性,以确保正确使用引用计数功能