我有一个 NSDate*,我将其存储为具有保留关键字的属性:
@property (nonatomic, retain) NSDate* startTime;
我是这样使用的:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"h:mm a"];
startTime = (NSDate*)[[NSUserDefaults] standardUserDefaults] objectForKey:@"StartTimeKey"];
if (startTime == nil)
startTime = [[dateFormatter dateFromString:@"8:00 am"] retain];
为什么我需要保留dateFromString:
消息的结果,但不需要保留objectForKey:
的结果?
我刚刚升级到 XCode 4.2,现在正在使用 LLVM GCC 4.2 编译器。在升级之前,代码在没有保留的情况下运行良好。现在它在没有保留消息的情况下崩溃(稍后在我访问 startDate 属性时在代码中)。
最佳答案
问题是你这样写的:
startTime = blah blah blah;
您正在直接设置实例变量 startTime
。如果您这样做:
self.startTime = blah blah blah;
然后编译器会把它变成这样:
[self setStartTime:blah blah blah];
自动生成的 setter 方法将为您完成保留。
如果你这样做:
@synthesize startTime = _startTime;
然后实例变量将被命名为_startTime
,这样更容易记住使用属性而不是直接赋值给实例变量。
关于objective-c - 为什么我需要保留 NSDateFormatter dateFromString : 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8088110/