1

@synchronizedとNSManagedObjectContextに関するAppleのドキュメントを読みましたが、はっきりとはわかりません。

この2つのコードの違いを誰かに説明してもらえますか?

ここに、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

最初のコメントで述べたように、これらは2つの異なるタイプのロックです。1つは、終了するまで、クラスのインスタンス全体への他のスレッドアクセスをブロックすることです。これは、そのようなクラスの他のメソッドを呼び出すことができないことを意味します。または、インスタンスに送信されるメッセージがブロックされることを意味します。

もう1つのロックは、NSManagedObjectContextへのアクセスをブロックしているだけです。

ただし、Appleは、コンテキストを同期する必要はないと述べています。代わりに、単一のNSPersistenceStoreCoordinatorを共有する複数のNSManagedObjectContextがある場合は、代わりにコーディネーターをロックすることをお勧めします。

于 2013-01-28T13:37:34.730 に答える