2012-11-29 95 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

(或者使用一個靜態函數來初始化它並返回靜態實例) –

相關問題