我想要一个NSMutableArray全局。我有以下设置:
code.h
extern NSMutableArray *global
@interface
@end
code.m
NSMutableArray *global=nil;
@implementation
...
global=variable_mutablearray; //copy variable_mutablearray to global
@end
我很确定我正在做的是将现有的nsmutablearray设置为全局变量是不正确的。我该怎么办?
答案 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,因此继承了全局/共享内存范例。