iOS:NSDateFormatter内存泄漏/ viewDidUnload

Cha*_*bot 2 memory iphone memory-leaks objective-c nsdateformatter

我有一个视图控制器,在离开堆栈后,在Leaks仪器中显示内存泄漏.在阅读了很多关于NSDateFormatter bug的帖子,并实现了setDateFormat'Z'解决方法之后,我仍在泄漏内存(根据Instruments).

在我的标题中:

NSDateFormatter *dfm;
...
@property (nonatomic, retain) NSDateFormatter *dfm;
Run Code Online (Sandbox Code Playgroud)

在我的实施中:

@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];
}
Run Code Online (Sandbox Code Playgroud)

有什么突出的不正确吗?我在这个类中用dfm做的唯一事情就是调用stringFromDate几个地方来返回我用UILabel的自动释放的字符串.

提前致谢.

XJo*_*nes 5

你不能依赖viewDidUnload被召唤.你还需要:

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

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