【发布时间】:2011-10-19 05:03:14
【问题描述】:
我正在阅读 Big Nerd Ranch 关于 iOS 编程的书,我对他们在第 7 章中创建的 Hypnotime 程序有疑问。
在某些时候,他们实现了以下方法:
- (void)showCurrentTime:(id)sender
{
NSDate *now = [NSDate date];
static NSDateFormatter *formatter = nil;
if (!formatter) {
formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterShortStyle];
}
[timeLabel setText:[formatter stringFromDate:now]];
}
我的问题是关于NSDateFormatter *formatter。格式化程序是用alloc 和init 创建的。我一直都知道任何带有alloc 的东西都需要在某个地方发布,对吧?当formatter 被传递给timeLabel 时,timeLabel 不发送retain 给它吗?并且不能(不应该?)我随后发布formatter?
我浏览了接下来几页上的代码,除了release 被发送到dealloc 中的timeLabel 之外,我在任何地方都找不到任何发布消息。
我是不是把事情搞混了? formatter 有什么理由不应该被我释放?我想成为一个好的记忆公民。任何帮助表示赞赏:)
【问题讨论】:
标签: iphone ios ios4 memory-management