我遇到的情况是,对XML文件的读写操作(由两个不同的线程和两个不同的视图控制器完成)是重叠的。
我尝试了以下逻辑,将两个视图控制器使用相同的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仍然能够获得它。
我在这里缺少什么?做这样的事情还有更好的方法吗?
答案 0 :(得分:1)
你肯定是同一个NSLock实例吗?无论如何,似乎更好的方法是为此设置一个调度队列; readFromXML可以将dispatch_sync发送到它上面,而writeToXML可以将dispatch_async发送到它上面。