objective-c - 为什么我需要保留 NSDateFormatter dateFromString : 的结果

标签 objective-c ios nsdate nsdateformatter retain

我有一个 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/

相关文章:

ios - UIPopover 发布 iOS

ios - Phonegap iOS App源码可见

ios - 使用 NSCharcterSet 进行 URL 编码

ios - 在 iOS 9 中隐藏复制/粘贴/返回面板(快捷方式面板)

ios - CocoaPods - 无法找到 `GoogleMaps` 的规范

ios - NSDateFormatter 中的无效日期

ios - Swift 中的 NSDate() 与 NSDate.date()

ios - NSDateFormatter 错误?

ios - 全屏模式下的 MPMoviePlayerController,完成按钮导致播放器暂停播放

objective-c - 读取串口iOS