2012-11-29 58 views
0

我遇到了一个情况,即对XML文件的读写操作(由两个不同的线程和两个不同的视图控制器完成)重叠。对两个视图控制器使用相同的NSLock

我尝试以下逻辑来使用相同的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锁定了xm lock,ControllerTwo仍然能够得到它。

我在这里错过了什么?另外,有没有更好的方法来做这样的事情?

+0

你的锁在哪里申报?你可以添加代码吗?并在哪里分配和制作.. –

+0

我已经在ControllerOne的.h文件中声明了myLock,然后在init方法中初始化它,然后从writeToXML方法调用[myLock lock]。 – Myxtic

回答

1

你是积极的,它是相同的NSLock实例吗?无论如何,似乎有一个更好的方法可能是有一个调度队列; readFromXML可以将dispatch_sync放到它上面,而writeToXML可以将dispatch_async放到它上面。

+0

要使用两个视图控制器中的相同调度队列,是否有办法通过标签获取队列? (我没有找到一个)或者我应该将队列声明为一个控制器的ivar并以这种方式访问​​它?后者是 – Myxtic

+0

。没有全局名称 - >队列映射表。 –

+1

(或者使用一个静态函数来初始化它并返回静态实例) –

相关问题