答案 0 :(得分:6)
正如蒙迪所说,你不需要锁定你正在做的事情。但是,要解决有关lock
和unlock
被弃用的一般问题...
您应该使用performBlock
或performBlockAndWait
代替。这些方法与NSManagedObjectContext
上的方法类似。
因此,不是手动锁定关键区域,而是将该代码放入一个可以执行的块中。"
例如,如果您有此代码......
[persistentStoreCoordinator lock];
[persistentStoreCoordinator doSomeStuff];
[persistentStoreCoordinator unlock];
你会用......替换它。
[persistentStoreCoordinator performBlock:^{
[persistentStoreCoordinator doSomeStuff];
}];
请注意,performBlock
是一个异步操作,它将立即返回,将代码块安排在将来的某个时刻在某个其他线程上执行。
这应该没问题,因为我们应该使用异步模型进行大部分编程。
如果必须有同步执行,则可以使用替代方法,该方法将在返回调用线程之前完成块的执行。
[persistentStoreCoordinator performBlockAndWait:^{
[persistentStoreCoordinator doSomeStuff];
}];
同样,这些行为与他们的NSManagedObjectContext
对应物完全相同。