2 年前我写了一个巨大的 iPad 应用程序,现在我回到它并将它升级到 iOS5。它有点乱,因为它是我的第一个大型 iPad 应用程序。
它有一个可能持续几分钟的“同步”步骤,这些是一堆异步方法调用,它们从 url 获取 JSON 并将它们放入核心数据中。应用程序经常会冻结(UI 无响应)。
有什么好的技术可以追踪这种冻结?调试器没有那么有用,除非代码在主线程上运行,否则您没有可用的堆栈跟踪。该应用程序通常也无法恢复,这表明存在某种死锁情况。
这是一个可能有帮助的特定示例:
一旦我确认它被冻结,我就暂停了执行。它似乎每次都冻结在同一行 - 一个简单的任务。这里发生了什么?它太令人沮丧了。
这是导致这种情况的核心数据访问吗?任何指针将不胜感激。
编辑 2012 年 6 月 29 日
单击此处查看执行所有核心数据对象的创建/更新/删除的类的源代码。我只需要停止此应用程序中的冻结/崩溃。我知道它一团糟,它也让我畏缩。两年前我写了这篇文章,几乎没有任何objective-c知识。我应该重新编写它,但我必须在 2 天内完成这项工作并且从我的脑海中消失。谁能给我一些关于快速获得这个线程安全的方法的指示?我可以将每个更新 NSManagedObjectContext 的方法包装在大型中央调度块代码中吗?