Stu*_*ssa 5 iphone macos cocoa cocoa-touch objective-c
我正在创建一个NSDate
将a转换NSDate
为a 的类别NSString
.它使用一个NSDateFormatter
来做.我发现每次分配然后释放格式化程序会导致我的应用程序出现明显的延迟(这个类别经常使用),所以我更新了我的'format'方法,如下所示:
- (NSString *)pretty
{
static NSDateFormatter *formatter = nil;
if (formatter == nil)
{
formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
}
return [formatter stringFromDate:self];
}
Run Code Online (Sandbox Code Playgroud)
这是在Cocoa中处理静态变量的正确方法吗?这是泄漏(没有dealloc
之后alloc
)?做这样的事情会有更好的方法吗?谢谢!
你正在有效地创建一个单身人士.除非它不会在您的应用程序的整个运行会话中使用,否则不要担心内存使用.即使它只是间歇性地使用,留下一个日期格式化器也不会成为问题.
就像单身一样,不要担心在应用程序终止之前释放对象.
如果pretty
要从多个线程中捣乱(并假设它NSDateFormatter
本身是线程安全的 - 我没有检查文档,因此,如果不验证线程安全性就不编写代码),那么你需要保护它初始化.
static dispatch_once_t onceMark;
static NSDateFormatter *formatter = nil;
dispatch_once(&onceMark, ^{
formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterLongStyle];
[formatter setTimeStyle:NSDateFormatterNoStyle];
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1154 次 |
最近记录: |