我有一個「sharedStore」 - 模式的單身人士的NSMutableArray。NSMutableArray線程併發與GCD
公開地說,它只能通過將其轉換爲NSArray的方法訪問。在類,它是
@property (nonatomic, copy) NSMutableArray *myItems;
這個數組永遠不會被操縱outsdie單身,但ViewControllers發送單消息來操作該控制器。其中一些消息清空陣列,一些重新填充它,等等。
已經結束了在一個方法調用中數組爲空而下一個方法尚未空的情況下,我開始實現一些併發行爲。
下面是我在做什麼至今:
在單身的.m文件,我有一個
@property (nonatomic, strong) dispatch_queue_t arrayAccessQueue;
在我單身的初始化它被創建爲一個串行隊列。然後,每一個有什麼關係改變此數組從dispatch_sync
電話中這樣做,例如方法:
dispatch_sync(self.arrayAccessQueue, ^{
[_myItems removeAllObjects];
});
這更好的事情做,並取得了我的應用程序表現得更加順暢。然而,除了修正上述一個奇怪的行爲之外,我無法量化它。我也覺得我在黑暗中可能潛伏在表面之下的任何問題。
這種模式對我有意義,但我應該使用別的東西,如@synchronize
或NSLock
或NSOperationQueue
?這會回來咬我嗎?
順便說一句 - 你是否正確地爲你的'myItems'屬性實現了一個明確的setter方法?如果不是,由於mutable屬性上的'copy'屬性,你將會遇到問題。 – rmaddy
嗯。我不知道。你的意思是'_myItems = [myItems copy]'?我認爲編譯器現在自動執行了這個操作,而且它不需要再明確地完成了?我錯了嗎? – magiclantern
問題在於[myItems copy]返回一個'NSArray',而不是'NSMutableArray',即使在可變數組上調用時也是如此。你需要重寫'setMyItems:'方法並調用mutableCopy'。 – rmaddy