1

我已经阅读了有关 @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];

每个代码块的含义是什么?哪一个是正确的?

非常感谢,我有点困惑。

4

1 回答 1

0

如第一条评论所述,这是两种不同类型的锁。一种是阻止其他线程访问您的类的整个实例,直到您完成为止。这意味着您不能调用此类的其他方法,或者更好的是,您发送到实例的消息被阻止。

另一个锁只是阻止访问您的 NSManagedObjectContext。

然而,Apple 表示没有必要同步上下文。相反,如果您有多个 NSManagedObjectContext 共享一个 NSPersistenceStoreCoordinator,最好锁定协调器。

于 2013-01-28T13:37:34.730 回答