NSDateFormatter init与复制性能

时间:2014-04-21 16:44:04

标签: ios objective-c nsdateformatter

我的ios应用程序需要大量使用NSDateFormatter,我知道创建NSDateFormatter的实例很昂贵,但创建很少的单例实例很好,但我需要使用大量的日期格式,我无法为所有这些格式创建实例格式,

正在做什么创建一个单独的NSDateFormatter,使用常见设置,如时区,语言环境,每当我想要克隆nsdateformatter 并对其进行更改时,

我的问题是

复制是否优于克隆?

处理多种日期格式的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

不幸的是,日期格式化程序设置的费用是在第一次使用它后创建它或设置它的任何属性。因此,对于您使用的每种格式化程序配置,您都无法至少避免一次成本。

我有一些建议:

  1. 在花费大量时间之前确保成本确实很重要。做天真的,易于获得正确的代码,然后使用Instruments
  2. 对其进行分析
  3. 查看您的使用模式。您使用的格式远远超过其他格式吗?考虑缓存那些。你一次使用几个,然后是几个不同的,依此类推?考虑缓存少量最近使用的格式化程序,以便您可以利用此模式。
  4. 在最糟糕的情况下(格式化程序性能很重要,并且没有使用它们的模式),考虑编写一个类来管理格式化程序的缓存,并在收到内存压力警告时清除它们。这样你可以尝试在没有低压的情况下获得最佳性能,并在你真正需要时释放内存。

答案 1 :(得分:0)

我无法谈论性能问题(运行您自己的测试以查看哪个更快)。

但我要做的是使用日期格式作为关键字来创建日期格式化程序的字典。

编写如下方法:

- (NSDateFormatter *)dateFormatterForFormat:(NSString *)dateFormat {
    NSDateFormatter *formatter = formats[dateFormat];
    if (!formatter) {
        formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:dateFormat];
        // any other setup needed
        formats[dateFormat] = formatter;
    }

    return formatter;
}

在代码中,formats是您在课堂上设置的NSMutableDictionary ivar或静态变量。