2012-07-05 41 views
4

我很新的多線程編程&可可。Obj-c/Cocoa中的互斥體

我需要一個鎖來訪問/修改一個NSMutableArray iVar。最簡單的方法是什麼?

雖然我在這裏,你們是否有一些關於Obj-c/Cocoa的多線程編程閱讀? Thx。

回答

10

使用@synchronized塊:

@synchronized(MyArray) 
{ 
    // thread safe code 
} 

此塊不被Xcode中有時認可,但請相信我,它的作品!

欲瞭解更多信息,你可以閱讀this文章。

+0

@downvoter解釋? – 2012-07-05 16:50:31

1

另一種方法是使用GCD和串行隊列。

對於您的NSArray屬性,編寫使用專用串行隊列的訪問器。設置並從後備存儲中獲取值。由於串行隊列是FIFO,並且將按順序運行這些塊,因此可以對該屬性進行線程安全訪問。

+0

你能更清楚一些例子嗎?謝謝! – 2012-07-05 16:43:56

+1

有點像__block id val = nil; dispatch_sync(aQueue,^ {val = [array objectAtIndex:index];});獲得一個值,dispatch_sync(aQueue,^ {[array addObject:obj];});爲二傳手。 – 2012-07-05 16:46:58

+0

請注意'dispatch_sync'!如果從當前隊列中調用,將導致死鎖。 – 2012-07-05 16:50:22