0

我正在使用 sqlite 文件来保存我的应用程序的日志。为了同步多个线程,我使用了一个单例对象并@synchronized这个对象,只有一个线程可以保存一次日志。NSManagedObjectContext 的对象是日志对象单例的成员。

我遇到了一个问题,当有很多线程保存它们的日志时,调用 [NSManagedObjectContext save:] 时一个线程会冻结。没有其他线程可以进入@synchronized 区域,这会导致所有这些线程冻结。我尝试降低调用 save: 方法的频率(例如,调用 save: 当 10 个线程完成保存日志时调用一次),问题发生的次数更少。我确定数据的格式是正确的,因为我尝试多次记录一个条目,并且冻结发生在中间。

你以前有没有遇到过这个问题。如果是这样,如何解决问题?好像用我的方式可以降低频率,但也只是走一走而已。我想知道调用 [NSManagedObjectContext save:] 时 App 冻结的原因。

谢谢。

4

1 回答 1

0

只有一个线程应该对托管对象上下文进行更新并保存(至少在任何时候)。在您的单例中创建一个NSOperationQueue,将其设置为一次只运行一个操作,然后通过一个新的NSOperation(可能是按块)添加每个日志。

于 2013-08-29T07:03:25.010 回答