设置NSMutableArray全局变量

时间:2012-07-30 02:54:37

标签: objective-c xcode nsmutablearray extern

我想要一个NSMutableArray全局。我有以下设置:

code.h
extern NSMutableArray *global
@interface
@end

code.m
NSMutableArray *global=nil;
@implementation
...
global=variable_mutablearray; //copy variable_mutablearray to global
@end

我很确定我正在做的是将现有的nsmutablearray设置为全局变量是不正确的。我该怎么办?

2 个答案:

答案 0 :(得分:3)

在Objective C中使用Globals不是最好的选择:使用 singleton 要好得多。

你可以这样做:

部首:

@interface Globals : NSObject
+(NSMutableArray*)array;
@end

实现:

@implementation Globals
+(NSMutableArray*)array {
    static NSMutableArray *statArray;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        statArray = [NSMutableArray array];
    });
    return statArray;
}
@end

用法:

NSMutableArray *ga = [Globals array];

答案 1 :(得分:0)

我必须假设行“global = variable_mutablearray;”是在某个时刻调用的方法内的赋值。

这可行,但你必须记住,这个对象的“所有权”充其量是有问题的。也就是说,每次分配或重新分配时,分配者应该将全局视为对类的ivar(意味着您将保留受让人对象,释放全局,然后将受让人分配给全局)。您需要确保不要使用自动释放的对象进行分配。

我确实认为单个/以其他方式封装数据将是首选。但最终Objective-C是C,因此继承了全局/共享内存范例。