保持Singleton实例中的值同步

时间:2011-02-13 13:51:40

标签: iphone objective-c cocoa-touch

我在我的app中使用了一个名为retrieveArray的单例变量。

@interface Shared : NSObject {
    NSMutableArray *books;
}

@property (nonatomic, retain) NSMutableArray *books;

+ (id)sharedManager;

@end

使用多个.m文件访问 NSMutableArray * retrieveArray; ...在头文件中

retrievedArray = [[Shared sharedManager] books];

我的问题是如何确保ret​​rieveArray中的值在所有类中保持同步。

请告诉我这样做的确切代码,因为我从未处理过此类案件。

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

3 个答案:

答案 0 :(得分:2)

Mike Ash写了一篇关于care and feeding of Singletons

的例子

答案 1 :(得分:1)

retrievedArray = [[Shared sharedManager] books];
  

我的问题是如何确保这一点   retrieveArray中的值   在所有人之间保持同步   类。

目前尚不清楚你在问什么。无论你调用books方法多少次,它总会返回对同一个对象的引用;相同的数组(假设您的单例正确实现)。

即。这样:

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];等完全相同......

更大的问题是其中一个线程;如果您正在考虑在不同的线程或队列中对books数组进行不同的引用,那么您的同步问题就在于NSMutableArray不是线程安全的。

答案 2 :(得分:0)

只要您确保Shared始终使用books的相同实例(这是,它的值被分配一次并且永远不会被另一个实例替换)一切都很好。如果修改了mutable数组的内容,每个人都会注意到,因为所有内容都引用了同一个实例。