2011-02-13 140 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实例(这是它的值被分配一次,永远不会被另一个实例取代),一切都很好。如果你修改可变数组的内容,每个人都会注意到,因为所有的都指的是同一个实例。