iphone – 设置方法所需的静态对象的正确方法

iphone – 设置方法所需的静态对象的正确方法,第1张

概述我正在NSDate上创建一个类别,它将NSDate转换为NSString.它使用NSDateFormatter来执行此 *** 作.我发现每次分配然后释放格式化程序会导致我的应用程序出现明显的延迟(这个类别经常使用),所以我更新了我的’format’方法,如下所示: - (NSString *)pretty{ static NSDateFormatter *formatter = nil; 我正在NSDate上创建一个类别,它将NSDate转换为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];}

这是在Cocoa中处理静态变量的正确方法吗?这是泄漏(分配后没有dealloc)?做这样的事情会有更好的方法吗?谢谢!

解决方法 你正在有效地创建一个单身人士.除非它不会在您的应用程序的整个运行会话中使用,否则不要担心内存使用.即使它只是间歇性地使用,留下一个日期格式化器也不会成为问题.

即就像单身一样,不要担心在应用程序终止之前释放对象.

如果要从多个线程中捣乱(并假设NSDateFormatter本身是线程安全的 – 我没有检查文档,因此,如果不验证线程安全就不编写代码),那么你想要保护初始化.

static dispatch_once_t onceMark;static NSDateFormatter *formatter = nil;dispatch_once(&onceMark,^{        formatter = [[NSDateFormatter alloc] init];        [formatter setDateStyle:NSDateFormatterLongStyle];        [formatter setTimeStyle:NSDateFormatterNoStyle];});
总结

以上是内存溢出为你收集整理的iphone – 设置方法所需的静态对象的正确方法全部内容,希望文章能够帮你解决iphone – 设置方法所需的静态对象的正确方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005999.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存