首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从不同线程使用时,NSDateFormatter会崩溃

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

Stack Overflow用户
提问于 2011-02-09 20:35:06
回答 5查看 6.3K关注 0票数 18

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

代码语言:javascript
复制
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:] ()

日期格式化程序仍在内存中(即未释放或损坏)。我能想到的唯一一件事就是崩溃后的字符串不符合格式,但我怀疑这会使格式化程序完全崩溃。(事先检查格式是很重要的)。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-10 15:41:41

感谢前面的回答者。

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

希望这对将来有帮助的人!

票数 45
EN

Stack Overflow用户

发布于 2012-04-22 03:56:24

另一种解决方案是序列化使用NSDateFormatter或任何其他非线程安全对象的代码的执行。使用中央调度中心,您可以在main_queue上推送代码:

代码语言:javascript
复制
dispatch_async(dispatch_get_main_queue(), ^(void){
  [some_object some_message];
});

或者使用私有队列来达到同样的效果:

代码语言:javascript
复制
dispatch_queue_t dispatch_queue = dispatch_queue_create("com.MyApp.serializer",NULL);
dispatch_async(dispatch_queue, ^(void){
  [some_object some_message];
});
票数 4
EN

Stack Overflow用户

发布于 2011-02-09 21:11:19

EXCBADACCESS将在您使用任何释放的对象时发生...尝试使用NSZombie..这是一种查找EXCBADACCESS发生位置的简单方法...它将指定哪个方法、哪个对象被释放

请参阅此链接http://www.markj.net/iphone-memory-debug-nszombie/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4944885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档