正如Mundi所说,你不需要为你正在做的事情加锁。但是,针对你关于lock
和unlock
被弃用的一般问题,你应该使用performBlock
或performBlockAndWait
。这些方法类似于NSManagedObjectContext
上的方法。
因此,你不再需要手动锁定关键区域,而是将该代码放入将要“执行”的块中。
例如,如果你有以下代码...
[persistentStoreCoordinator lock];
[persistentStoreCoordinator doSomeStuff];
[persistentStoreCoordinator unlock];
[persistentStoreCoordinator performBlock:^{
[persistentStoreCoordinator doSomeStuff];
}];
performBlock
是一个异步操作,它会立即返回,并将代码块安排在将来的某个时间点在其他线程上执行。这应该没问题,因为我们应该使用大部分异步模型进行编程。[persistentStoreCoordinator performBlockAndWait:^{ [persistentStoreCoordinator doSomeStuff];
}];
同样的,它们的行为与NSManagedObjectContext
的对应项完全相同。
只需删除有问题的代码行即可。在向协调器添加持久化存储时不需要任何锁。
此外,您应该使用最新的Xcode,目前是7.2。