从不同的线程使用时,NSDateFormatter崩溃

jbe*_*net 18 multithreading exc-bad-access objective-c nsdateformatter ios

我们不断得到一个随机的,奇怪的崩溃NSDateFormatter.相关的堆栈跟踪是:

Program received signal:  “EXC_BAD_ACCESS”.
#0  0x00000005 in ?? ()
#1  0x0213e3c3 in udat_parse ()
#2  0x01d4e1ca in CFDateFormatterGetAbsoluteTimeFromString ()
#3  0x01d4e225 in CFDateFormatterCreateDateFromString ()
#4  0x003e2608 in getObjectValue ()
#5  0x003e2921 in -[NSDateFormatter getObjectValue:forString:errorDescription:] ()
#6  0x003e21cd in -[NSDateFormatter dateFromString:] ()
Run Code Online (Sandbox Code Playgroud)

日期格式化程序仍在内存中(即未释放或损坏).我唯一能想到的是崩溃时的字符串不符合格式,但我怀疑这会使格式化程序完全崩溃.(事先检查格式是非常简单的).

有什么想法吗?

jbe*_*net 45

感谢以前的回答者.

这不是内存问题.结果证明是同步问题.NSDateFormatters不是线程安全的; 有一个后台线程试图同时使用相同的格式化程序(因此随机性).

希望这有助于未来的人!

  • 我确保每个线程都访问自己的NSDataFormatter.如果你不担心争用,你可以在使用它的代码周围添加`@synchronized(dateFormatter){...}`. (3认同)