2011-02-13 145 views
0

我在我的應用程序中使用了一個名爲retrieveArray的單例變量。保持Singleton實例中的值同步

@interface Shared : NSObject { 
    NSMutableArray *books; 
} 

@property (nonatomic, retain) NSMutableArray *books; 

+ (id)sharedManager; 

@end 

這在使用 的NSMutableArray * retrievedArray多個.m文件被訪問; ......在頭文件

retrievedArray = [[Shared sharedManager] books]; 

我的問題是我如何確保內部retrievedArray值保持在所有的類同步。

請讓我知道這樣做的確切代碼,因爲我從來沒有處理過這種情況。

**我在我的應用程序中使用NSThread。

回答

1
retrievedArray = [[Shared sharedManager] books]; 

我的問題是我如何確保 內retrievedArray 值保持在所有 類同步。

目前還不清楚你在問什麼。無論您調用books方法多少次,它總是會返回對同一對象的引用;相同的數組(假設你的單例實現正確)。

I.e.這樣的:

NSMutableArray *books1 = [[Shared sharedManager] books]; 
NSMutableArray *books2 = [[Shared sharedManager] books]; 
NSMutableArray *books3 = [[Shared sharedManager] books]; 
NSMutableArray *books4 = [[Shared sharedManager] books]; 

可生產4個變量均指同一個對象。如果你說[books1 addObject: aBook];,這和說[books2 addObject: aBook];等完全一樣......

更大的問題是其中一個線程;如果您考慮在不同的線程或隊列中對書籍數組有不同的引用,那麼您的手中存在同步問題,因爲NSMutableArray不是線程安全的。

+0

是的,抱歉不清楚。我在我的應用程序中使用線程,因此似乎有一些同步問題。我該如何解決這個問題? – testndtv 2011-02-14 18:13:13

0

只要你確保Shared總是使用相同的books實例(這是它的值被分配一次,永遠不會被另一個實例取代),一切都很好。如果你修改可變數組的內容,每個人都會注意到,因爲所有的都指的是同一個實例。