Mik*_*e S 6 deadlock core-data ipad ios
我2年前写了一个巨大的iPad应用程序,现在我又回到了它并将其升级到iOS5.它有点乱,因为它是我的第一个大型iPad应用程序.
它有一个"同步"步骤可能会持续几分钟,这些是一堆异步方法调用,它们从一个url获取JSON并将它们放入核心数据中.通常,应用程序将冻结(UI无响应).
有什么好的技巧来追踪这种冻结?调试器没有用,因为除非代码在主线程上运行,否则您没有可用的堆栈跟踪.该应用程序通常无法恢复,这表明某种死锁情况.
以下是一个可能有用的特定示例:

一旦我确认它被冻结,我暂停了执行.它似乎每次都冻结在同一条线上 - 一个简单的任务.这里发生了什么?它太令人沮丧了.
此核心数据访问是否导致此问题?任何指针都将非常感激.
编辑2012年6月29日
单击此处查看执行所有创建/更新/删除Core数据对象的类的源代码.我只需要在这个应用程序中停止冻结/崩溃.我知道它一团糟,它也让我感到畏缩.我2年前写的这篇文章几乎没有任何关于Objective-c的知识.我应该重写它,但我必须在2天内让这个工作完全失控.任何人都可以指点一下快速获得线程安全的方法吗?我可以在大中央调度块代码中包装更新NSManagedObjectContext的每个方法吗?
确实有可能核心数据(与多线程结合)是您遇到麻烦的原因 - 我遇到了类似的问题。
这是关于该主题的一篇优秀文章:Core Data andthreads, without the pain
我还在你的堆栈跟踪中看到了对 的调用performSelector:。您可能需要考虑使用 Grand Central Dispatch,尽管在您的情况下可能需要重写很多内容。
至于您的实际问题(追踪死锁),我建议也使用 Instruments。另外,查看其他线程的状态。
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |