2011-04-06 68 views
1

我想得到一些幫助,以理清我已經實現了一個NSMutableArray單例的代碼。NSMutable單身問題

h文件

@interface MySingleton : NSObject { 

    NSMutableArray *globalArray; 

} 

+ (MySingleton *)instance; 

- (NSMutableArray *) getArray; 

- (void) addArray:(NSObject *)arrayToAdd; 

- (id) init; 



.m file 

@implementation MySingleton 


- (id) init 
{ 
    self = [super init]; 
    globalArray = [[NSMutableArray alloc] init]; 
    return self; 
} 


+ (MySingleton *)instance { 

    static MySingleton *instance; 

    @synchronized(self) { 
     if(!instance) { 
      instance = [[MySingleton alloc] init]; 

     } 
    } 
    return instance; 
} 


- (NSMutableArray *) getArray{ 
    return globalArray; 
} 



- (void) addArray:(NSMutableArray *)arrayToAdd 
{ 

    [globalArray addObject:arrayToAdd]; 

} 

someviewcontroller.m

MySingleton *prodInstance = [MySingleton instance]; 
[prodInstance addArray:tmpArray]; 
NSLog(@"cnt tmpArray %i",[tmpArray count]); 
NSLog(@"cnt singleton %i",[[prodInstance getArray] count]); 

控制檯將顯示計數3和1

我想[prodInstance的getArray]將是相同tmpArray 。

謝謝

回答

1

的問題是你的addArray方法是把tmpArrayglobalArray,這顯然不是你想要的。

我不認爲真的有任何理由有addArray在所有 - 只需撥打getArray獲得全球陣列,並與此合作。例如:

// add all objects in tmpArray to prodInstance global array 
[[prodInstance getArray] addObjectsFromArray:tmpArray]; 
+0

感謝您的快速回答。 – user643097 2011-04-06 01:46:31

0

-addArray:,您要添加的數組參數arrayToAdd隨着全球數組中的單個元素。它看起來像你想添加的數組參數,而不是所有的元素,所以更換

[globalArray addObject:arrayToAdd]; 

[globalArray addObjectsFromArray:arrayToAdd]; 

此外,由於說法並不需要是一個可變數組,考慮改變參數類型爲NSArray *