ios - 单例类中的 NSDateFormatter 还是每个部分一个以获得更便宜的代码?

标签 ios objective-c singleton nsdateformatter

我在一些线程中看到,用户创建类别来共享 NSDateFormatter 的静态实例。

我的应用有多个部分和一个单例类,每个部分有多个 View ,一些 View 确实使用了NSDateFormatter。我使用 singleton 在各部分之间共享数据,而无需重复网络连接。

我有点担心 formatters 的成本,为了解决这个问题,我可以在我的 singleton 类和 alloc< 上创建一个方法, init 一个 formatter 在那里,它会一直存在,我可以使用 category 或者我可以创建一个每个部分的主视图,所以至少我不需要每个 View 都有一个。

我想我的 singleton 上的方法应该是这样的,对吧?

+ (NSDateFormatter *)sharedDateFormatter
{
    static NSDateFormatter *sharedDateFormatter = nil ;
    if (sharedDateFormatter == nil)
    {
        sharedDateFormatter = [[NSDateFormatter alloc] init] ;
        [sharedDateFormatter setLocale: [[[NSLocale alloc] initWithLocaleIdentifier: @"en_GB"] autorelease]] ;
        [sharedDateFormatter setDateFormat: @"YYYY-MM-dd HH:mm:ss ZZZ"] ;
    }
    return sharedDateFormatter ;
}

我的问题是,降低 NSDateFormatters 成本的最佳做法是什么?

最佳答案

单例很好,但我会使用 dispatch_once 模式。

问题:NSDateFormatter 不是线程安全的。如果您仅在同一个线程上使用同一个 NSDateFormatter,或者例如在同一个串行调度队列中,那很好。否则,您必须使代码线程安全,或者使用多个 NSDateFormatters,每个线程一个。

关于ios - 单例类中的 NSDateFormatter 还是每个部分一个以获得更便宜的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807642/

相关文章:

ios - 使用 AlamoFire 在 Swift 中通过证书固定实现的 HTTPS 请求失败

ios - 在手动关闭 View 之前如何将数据转发到协议(protocol)?

objective-c - 在多个线程中执行任务怎么会比在主线程上顺序执行慢 100 倍呢?

java - 在 Java 中,每个线程可能是 Singleton 吗?

iphone - plists 的可加载包

iOS 设备 token

objective-c - 如何在 ios 开发中从 mp3 文件中提取元数据

iphone - 如何知道从按钮 ios 输入数据时文本字段值是否发生变化

c++ - 为什么在 C++ 中创建单例类时静态函数不能引用静态变量?

如果在 .cpp 中实现函数,则出现 C++ 链接错误