我已经阅读了有关@synchronized和关于NSManagedObjectContext的Apple文档,但我根本没有看到这些内容。
有人能解释一下这两段代码之间的区别:
这里我们有一个关键部分,我们在其中查询NSManagedObjectConext
@synchronized(self) {
array = [mainContext executeFetchRequest:request error:&error];
if (error != nil) {
NSLog(@"Obj list fetch error: %@", error);
exit(-1);
}
}
在这里,我们在锁定的NSManagedObjectConext
中执行相同的查询 [mainContext lock];
array = [mainContext executeFetchRequest:request error:&error];
if (error != nil) {
NSLog(@"Obj list fetch error: %@", error);
exit(-1);
}
[mainContext unlock];
每个代码块有什么含义?哪一个是正确的?
非常感谢,我有点困惑。
答案 0 :(得分:0)
如第一条评论中所述,这是两种不同类型的锁。 一个是阻止对你的类的整个实例的其他线程访问,直到你完成。这意味着您无法调用此类的其他方法,或者更好的是,阻止发送给实例的消息。
另一个锁只是阻止访问您的NSManagedObjectContext。
然而,Apple表示没有必要同步上下文。相反,如果您有多个NSManagedObjectContext共享一个NSPersistenceStoreCoordinator,则最好锁定协调器。