我正在使用 sqlite 文件来保存我的应用程序的日志。为了同步多个线程,我使用了一个单例对象并@synchronized这个对象,只有一个线程可以保存一次日志。NSManagedObjectContext 的对象是日志对象单例的成员。
我遇到了一个问题,当有很多线程保存它们的日志时,调用 [NSManagedObjectContext save:] 时一个线程会冻结。没有其他线程可以进入@synchronized 区域,这会导致所有这些线程冻结。我尝试降低调用 save: 方法的频率(例如,调用 save: 当 10 个线程完成保存日志时调用一次),问题发生的次数更少。我确定数据的格式是正确的,因为我尝试多次记录一个条目,并且冻结发生在中间。
你以前有没有遇到过这个问题。如果是这样,如何解决问题?好像用我的方式可以降低频率,但也只是走一走而已。我想知道调用 [NSManagedObjectContext save:] 时 App 冻结的原因。
谢谢。