0

XMLファイルへの読み取り操作と書き込み操作(2つの異なるスレッドと2つの異なるビューコントローラーによって実行される)が重複している状況に遭遇しています。

2つのViewControllerで同じNSLockを使用するために、次のロジックを試しました。

ViewControllerOne:

(on a background thread using dispatch_async)
- (void)writeToXML {
    // get xmlLock (lock declared globally)
    // write
    // unlock
}

ViewControllerTwo:

(on the main thread)
- (void)readFromXML {
    // get xmlLock (lock referenced from ControllerOne)
    // read
    // unlock
}

ただし、デバッグ中に、ControllerOneがxmlLockをロックしている場合でも、ControllerTwoはそれを取得できることに気付きました。

ここで何が欠けていますか?また、このようなことをするためのより良いアプローチはありますか?

4

1 に答える 1

1

同じNSLockインスタンスであると確信していますか?とにかく、そのためのディスパッチキューを用意するのがより良い方法のようです。readFromXMLはそれにdispatch_syncでき、writeToXMLはそれにdispatch_asyncできます。

于 2012-11-29T18:45:39.570 に答える