NSMutable 单例问题

发布于 2024-10-31 05:47:43 字数 1130 浏览 1 评论 0原文

我想获得一些帮助来整理我为实现 NSMutableArray 单例而想出的代码。

.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 相同。

谢谢

I would like to get some help to sort out the code I've come up with to implement a NSMutableArray singleton.

.h file

@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]);

The console will display counts 3 and 1.

I thought [prodInstance getArray] will be the same as the tmpArray.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚风撩人 2024-11-07 05:47:44

问题是您的 addArray 方法将 tmpArray 放入 globalArray 中,这显然不是您想要的。

我认为根本没有任何理由需要 addArray ——只需调用 getArray 来获取全局数组,并使用它即可。例如:

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

The problem is your addArray method is putting tmpArray inside globalArray, which is apparently not what you want.

I don't think there's really any reason to have addArray at all -- just call getArray to get the global array, and work with that. For example:

// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];
白色秋天 2024-11-07 05:47:44

-addArray: 中,您将数组参数 arrayToAdd 添加为全局数组中的单个元素。看起来您想添加数组参数的所有元素,因此替换

[globalArray addObject:arrayToAdd];

[globalArray addObjectsFromArray:arrayToAdd];

Also,由于参数不需要是可变数组,请考虑将参数类型更改为 NSArray *

In -addArray:, you’re adding the array argument arrayToAdd as a single element in the global array. It looks like you want to add all the elements of the array argument instead, so replace

[globalArray addObject:arrayToAdd];

with

[globalArray addObjectsFromArray:arrayToAdd];

Also, since the argument doesn’t need to be a mutable array, consider changing the parameter type to NSArray *.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文