cab*_*ret 5 iphone memory-management ios4 ios
我正在阅读有关iOS编程的Big Nerd Ranch书籍,我对他们在第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]];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是关于NSDateFormatter *formatter
.格式化程序使用alloc
和创建init
.我总是知道有什么东西alloc
需要在某个地方发布,对吧?什么时候formatter
传递给timeLabel
,不timeLabel
发送retain
给它?不能(不应该?)我随后发布formatter
?
我通过对接下来的页面代码浏览,我找不到任何地方的任何释放消息,除了release
存在发送到timeLabel
在dealloc
.
我在这里混合了吗?有没有理由formatter
不应该被我释放?我想成为一个好记忆的公民.任何帮助表示赞赏:)
他们将格式化程序声明为静态,因此目的是使格式化程序在应用程序的整个生命周期内保持活动状态。这是出于性能原因,并且可能是一种不成熟的优化,因此不要将此作为您自己未来开发的最佳实践。
//static (even in a method) will allow formatter to live during entire app lifecycle
static NSDateFormatter *formatter = nil;
//Check if formatter has been set (this is not thread safe)
if (!formatter) {
//Set it once and forget it, it wont be a leak, and it wont ever be released
formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterShortStyle];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
244 次 |
最近记录: |