我目前正在使用由其他东西开发的(非常)大的应用程序。
它开发得很好,代码看起来也不错……而不是访问核心数据。
实际上,每次访问ManagedObjectContexts
都是在几个块中进行的,对应于几个 Web 服务......在几个线程中。
并且文档说这很糟糕。这就是为什么有时,我的应用程序冻结在核心数据访问上。
是的,我知道我应该
为每个线程创建单独的托管对象上下文并共享单个持久存储协调器
正如文档所说,但代码已经存在并且非常庞大,我的客户需要快速解决方案(像往常一样)。
所以这里的问题是:
我见过一种[managedObjectContext lock]
方法。这似乎是一些信号量的东西。但是医生并没有说太多。
我的 web 服务在不同的线程中使用 managedObjectContext 的相同实例。
-你想做什么
[managedObjectContext lock]
// core data access
// core data access
// core data access
[managedObjectContext unlock]
在我的每个网络服务块中?
- 这会解决冻结问题吗?
- 这是推荐的方式吗?
没有人告诉我lock
&unlock
方法,所以我做了一个 EDIT :
因为 de freezes 不会每次都发生,所以我尝试了 3 种情况:
不要保护我的数据访问
使用
[managedObjectContext lock]
unlock]
方法采用
@synchronized(managedObjectContext) { ... }
在第一种情况下,10 次测试发生 3 次冻结。在第 2 和第 3 种情况下,根本没有冻结。
所以我的第二个问题:
lock
使用/unlock
和有什么区别@synchronize( )
?