2

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

code.h
extern NSMutableArray *global
@interface
@end

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

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

4

2 回答 2

3

全局变量不是在 Objective C 中使用的最好的东西:使用单例要好得多。

你可以这样做:

标题:

@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];
于 2012-07-30T03:05:47.830 回答
0

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

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

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

于 2012-07-30T03:10:54.627 回答