全局数组问题

时间:2010-08-22 08:55:34

标签: iphone

我尝试制作一个可以在所有视图控制器中添加和删除项目的全局数组。我用过了 应用委托* app ....方法然后分配一个像这个应用程序的数组。 Mutable array = nsmutable array alloc init 但是,我不能让它在全球范围内实施。

3 个答案:

答案 0 :(得分:1)

您需要的是静态变量和访问它的方法。在Objc中,通常的方法是使用单身人士。

.h file

@interface MySingleton : NSObject {
    NSMutableArray *theArray;
}

+ (MySingleton*)sharedInstance;

@property (readonly) NSMutableArray *theArray;

@end

.m file

@implementation MySingleton

@synthethize theArray;

- (id)init {
    ...
    theArray = [NSMutableArray new];
    ...
}

- (void)dealloc {
    [theArray release];
}
+ (MySingleton*)sharedInstance {
    static MySingleton *s;
    if(!s) s = [[MySingleton alloc] init];
    return s;
}
@end

然后使用以下命令访问您的数组:

[MySingleton sharedInstance].theArray

你也可以在任何.m文件中使用类似的东西去C路线:

NSMutableArray *mySharedArray(void) {
    static NSMutableArray *a;
    if(!a) a = [NSMutableArray new];
    return a;
}

在任何.h文件中:

NSMutableArray *mySharedArray(void);

然后你可以从任何包含声明它的.h文件的代码中调用mySharedArray()

注意:这些方法都不是线程安全的,如果你想要一个线程安全的全局数组,你将不得不做一些锁定。

答案 1 :(得分:0)

很可能你并不真的需要数组是全局的,你只是懒得正确设计代码。单身人士会工作,但它只会使设计变得更加丑陋(=更难以使用)。正确的解决方案是摆脱全局变量。它更难,但从长远来看会有所回报。

答案 2 :(得分:0)

实际上单身人士已经存在了。在您当前的实现中,您可以使用sharedApplication来获取您的应用程序代理并通过它访问您的阵列。