0

我正在开发一个应用程序从 facebook 获取图像的应用程序。我正在使用核心数据来保存图像。我使用dispatch_asyc函数将图像保存在核心数据中。我用

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)

保存图像,以便我的主线程不会阻塞。

但有时我观察到应用程序冻结并且没有响应。我使用相同的方式将图像保存到应用程序中不同位置的核心数据,例如如果用户转到已签名的用户个人资料,则应用程序以相同的方式保存他的相册照片。此外,如果用户全屏查看任何图像,它会开始以相同的方式获取评论、喜欢和保存。

如果我使用私人队列并将其用于保存,则应用程序不会冻结。

由于我在应用程序的许多地方都使用全局队列,这是冻结应用程序的原因吗?

谢谢。

4

2 回答 2

2

你真的应该在这里阅读关于并发的核心数据编程指南部分。听起来您正在访问创建它的线程之外的 managedObjectContext ,这是非法的。您可能最好使用带有 performBlock 的子上下文来执行此任务。像这样的东西:

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setParentContext:parentContext];
[context performBlock:^{
   //Save image
}];
于 2013-05-04T16:28:44.300 回答
-1

这个问题已被解决。问题是多个线程访问主上下文,因此应用程序进入冻结状态。现在这个问题已经解决了。

于 2013-05-14T10:53:53.250 回答