如何在ios中的nsarray中声明常量值

时间:2013-01-07 13:49:29

标签: iphone ios

我已经按照以下方式声明了常量NSArray

static NSArray* const myArray = [NSArray arrayWithObjects:@"obj1",@"obj2",@"ibj3",@"obj4",@"obj5",nil];

但它显示错误“Initiliser元素不编译时间常数”。 所以我这样说了。但我得到了错误。

请帮助本案例。

感谢。

4 个答案:

答案 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" ];

相关问题