我已经按照以下方式声明了常量NSArray
。
static NSArray* const myArray = [NSArray arrayWithObjects:@"obj1",@"obj2",@"ibj3",@"obj4",@"obj5",nil];
但它显示错误“Initiliser元素不编译时间常数”。 所以我这样说了。但我得到了错误。
请帮助本案例。
感谢。
答案 0 :(得分:6)
由于NSArrays
是堆分配的对象,因此无法在静态上下文中创建它们。您可以声明变量,然后在方法中初始化它们。
所以,你可以这样做: -
static NSArray *myStaticArray = nil;
- (void) someMethod
{
if (myStaticArray == nil)
{
myStaticArray = [[NSArray alloc] init...];
}
}
希望它可以帮助你..
答案 1 :(得分:3)
我不明白为什么你不能用它来解决你的问题。 100%常量,因为NSArray
是不可变的,并且 100%静态。
GlobalConstant.h 文件:
#import <Foundation/Foundation.h>
// EDITED : __unused static NSArray *_myGlobalArray;
@interface GlobalConstant : NSObject
+ (NSArray *)myGlobalArray;
@end
GlobalConstant.m 档案:
#import "GlobalConstant.h"
@implementation GlobalConstant
+ (NSArray *)myGlobalArray {
static NSArray *_myGlobalArray = nil; // EDITED
@synchronized (_myGlobalArray) {
if (_myGlobalArray == nil) {
_myGlobalArray = [NSArray arrayWithObjects:@"1", @"2", nil]; // here is your array...
}
return _myGlobalArray;
}
}
@end
...您的数组将在包含GlobalConstant.h
文件的每个类中可用,您可以像
NSArray *_globalArray = [GlobalConstant myGlobalArray];
答案 2 :(得分:2)
要创建静态数组,您可以使用initialize
方法。这是每个类都有的特殊类方法。它是在第一次以任何方式引用类并且在执行类中的任何其他代码之前调用它。
static NSArray* myArray = nil;
@implementation SomeClass
+ (void)initialize {
if (self == [SomeClass class]) {
myArray = @[ @"obj1", @"obj2", @"obj3", @"obj4", @"obj5" ];
}
}
// rest of methods
@end
答案 3 :(得分:0)
并且,为了保存输入,您可以使用NSArray* myArray = @[ @"obj1", @"obj2", @"ibj3", @"obj4", @"obj5" ];