我正在使用sqlite文件来保存我的应用程序日志。为了同步多个线程,我使用了一个singleton对象并且@synchronized这个对象,只有一个线程可以保存一次日志。 NSManagedObjectContext的对象是日志对象singleton的成员。
我遇到了一个问题,当有许多线程保存他们的日志时,一个线程在调用[NSManagedObjectContext save:]时会冻结。没有其他线程可以进入@synchronized区域,这会导致所有这些线程冻结。我试图降低调用save:方法的频率(例如,当10个线程完成保存日志时调用save:一次),问题发生得更少。我确信数据的格式化是正确的,因为我尝试记录多次输入,并且冻结发生在中间。
您之前遇到过此问题吗?如果是这样,如何解决问题?似乎用我的方式可以降低频率,但它只是一个走动。我想知道在调用[NSManagedObjectContext save:]时应用程序冻结的原因。
感谢。
答案 0 :(得分:0)
只有一个线程应该对托管对象上下文进行更新并保存(至少在任何时候)。在单例中创建NSOperationQueue
,将其设置为一次只运行一个操作,然后通过新的NSOperation
添加每个日志(可能是按块)。