2013-10-03 25 views
0

我正在混淆有关的NSMutableArray ADDOBJECT,我尽量让共享实例nsmutable数组是这样的:NSMutableArray的共享实例总是返回刚刚过去的对象

1.Shared例如

+ (netra*)someInstance 
{ 
    if (sharedObject == nil) { 
     sharedObject = [[super allocWithZone:NULL] init]; 
    } 
    return sharedObject; 
} 

1.1方法插入

+(void) setStock:(NSInteger *)stock{ 
    // Ensure we are using the shared instance 
    netra *shared = [netra sharedInstance]; 
    [shared.stockInits addObject:stock]; 

} 

1.3方法调用的NSMutableArray

+(NSMutableArray *) getStock{ 
    // Ensure we are using the shared instance 
    netra *shared = [netra sharedInstance]; 
    return shared.stockInits ; 
} 

2.Method插入

-(void) some{ 
for(int x=0;x<=1000;x++){ 
    [netra setStock:i]; 
} 
} 

3.方法从其他控制器

for (int x=0; x<=[netra getStock].count;x++){ 
nslog (@"i-------->%d",x); 
} 

日志应显示0-1000正确调用???但为什么它总是返回1000 ...... 1000?我的代码中有任何错误吗?

回答

1

首先,我会成为一个getInstance方法,如:

@implementation SinglentonObject{ 
    NSMutableArray *array; 
} 

+ (id)getInstance { 
    static SinglentonObject *instance = nil; 
    @synchronized(self) { 
     if (instance == nil) { 
      instance = [[SinglentonObject alloc] init]; 
     } 
     return instance; 
    } 
} 

-(void) setStock:(NSNumber *)stock{ 
    // Ensure we are using the shared instance 
    if(!array){ 
     array = [@[] mutableCopy]; 
    } 
    [array addObject:stock]; 

} 

- (NSMutableArray *) getStockArray 
{ 
    return stockArray; 
} 

而且在你的someMethod用X来改变一下:

-(void) write 
{ 
    for(int x=0;x<=1000;x++){ 
     [[SinglentonObject getInstance] setStock:@x]; 
    } 
} 

对于阅读:

- (void) read 
{ 
    for (NSNumber *currentStock in [[SinglentonObject getInstance] getStockArray]) { 
     NSLog(@"%d", [currentStock intValue]); 
    } 
} 

请记住将getInstance的每个方法都修改为类方法。我建议您阅读一些单例模式文章lik e http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/

+0

嗯很好的答案,但为什么我不能从其他类迭代nsmutablearray ..如果我数它,它返回正确的长度..然后它已经插入nsmutablearray对不对?但为什么只是最后的记录显示?是那个nsmutable数组重置内容,而我打电话setStock?或其他原因? –

+1

因为有一些候选人,所以我不确定哪些代码会引起怪异的行为。我将编辑答案以改进它。 –

+0

嗯,谢谢!但它仍然给我很大的神秘;)以及如果该数据不是nsnumber?如果数据是我想要将其绘制到tableview中的nsdictionary,该怎么办? –

相关问题