iOS:NSDateFormatter内存泄漏/ viewDidUnload

时间:2011-04-09 21:44:27

标签: iphone objective-c memory memory-leaks nsdateformatter

我有一个视图控制器,在离开堆栈后,在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中使用的自动释放的字符串。

提前致谢。

1 个答案:

答案 0 :(得分:5)

您不能依赖viewDidUnload来呼叫。你还需要:

- (void)dealloc {
    self.dfm = nil;
    // whatever else you need
    [super dealloc];
}

您只需要self.dfm = nil,因为默认的合成setter将会发布。