Cocoa中NSString到NSDate的处理

NSDate是NS类库中基础类型之一。社交化时代,用户应用程序对数据处理量越来越大,我们经常从服务器取得的日期是字符串序列,格式化为正确的date类型是一个不可避免的工作。在Cocoa程序里提供了非常方便的函数和类,但是仍然需要我们了解一些技巧。尤其是当我们的程序面对大量的日期字符串转换的时候,要格外的注意。苹果文档中使用NSDateFormatter类格式化日期字符串,但是以防读者不知道,我这里提一下:它的速度非常慢!!这篇文章介绍如何处理这种情况。

由于NSDateFormatter内部代码原因,所以格式化字符串代价很大。对于个别地方使用它做日期转换是非常方便的,但是如果是放在一个大的循环内部,直接使用NSDateFormatter绝对不是明智的选择。它很有可能成为拖慢你程序速度的元凶。

其实如果你知道你的程序将会取得什么格式的日期字符串,那么直接分解字符串后利用NSCalendar和NSDateComponents可以提高速度很多。

如果要更快,就需要抛弃ObjC,编写c代码格式化时间字符串。如下代码经过测试是最快的。

下面是我简单测试循环10000次解析日期字符串的时间比较。

最后作为参考资料,说明一下 OSX 10.6 下 NSDateFormatter 使用 Unicode Locale Data Markup Language (LDML) version tr35-10 标准。作为标准文档,Apple是不会全部写到开发文档里的,不明白的同学可以到这查看。

  • wcrane

    方法一中对NSDateformatter使用静态变量或全局变量的话,能很大的提高速度,官方文档中推荐的方式。