我有一个视图控制器,在离开堆栈后,在Leaks仪器中显示内存泄漏。在阅读了大量有关the NSDateFormatter bug的帖子并实施setDateFormat 'Z' workaround之后,我仍然在泄漏记忆(根据乐器公司的说法)。
在我的标题中:
NSDateFormatter *dfm;
...
@property (nonatomic, retain) NSDateFormatter *dfm;
在我的实施中:
@synthesize dfm;
...
- (void) viewDidLoad {
[super viewDidLoad];
dfm = [[NSDateFormatter alloc] init];
[self.dfm setDateFormat:@"h:mma Z"]; // leaks with & without this line
}
...
- (void)viewDidUnload {
//SOLUTION: This method was never being called. Needed to use dealloc, per the answer below.
[dfm release];
self.dfm = nil;
[super viewDidUnload];
}
有什么突出的不正确吗?我在这个类中使用dfm做的唯一事情就是在几个地方调用stringFromDate
来返回我在UILabels中使用的自动释放的字符串。
提前致谢。
答案 0 :(得分:5)
您不能依赖viewDidUnload
来呼叫。你还需要:
- (void)dealloc {
self.dfm = nil;
// whatever else you need
[super dealloc];
}
您只需要self.dfm = nil
,因为默认的合成setter将会发布。