【发布时间】:2011-11-11 00:04:43
【问题描述】:
我有一个 NSDate*,我将其存储为带有 retain 关键字的属性:
@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 属性时的代码中)。
【问题讨论】:
-
按照规则,你不应该保留它,因为 dateFromString 会自动释放,但 startTime 属性应该保留分配,因为它被归因于保留
-
顺便说一句,看起来像 dataFormatter 泄漏(如果你不使用 ARC)。
-
@DavidDunham - 我认为这是standardUserDefaults objectForKey:泄漏。
标签: objective-c ios nsdate nsdateformatter retain