Obj-c中数组的文字语法

San*_*eep 1 objective-c ios

在阅读这篇博客时,作者说

NSArray *array = @[ @"one", @"two" ];
Run Code Online (Sandbox Code Playgroud)

如果上面的数组是一个全局变量,那么它就会出错.原因是

这是因为@ []语法字面上转换为对NSArray方法的调用.编译器无法在编译时计算该方法的结果,因此在此上下文中它不是合法的初始值设定项.

我的问题是方法中的相同声明如何有效?

rma*_*ddy 6

数组文字语法被翻译为:

NSString *vals[2] = { @"one", @"two" };
[NSArray arrayWithObjects:vals count:2];
Run Code Online (Sandbox Code Playgroud)

全局和静态只能使用编译时常量初始化.以上不是编译时常量.它只能在运行时进行评估.

可以在运行时初始化常规变量,因此该值不需要是编译时常量.

静态或全局的一个选项是initialize在类的方法中初始化它:

static NSArray *array = nil;

+ (void)initialize {
    if (self == [ThisClass class]) {
        array = @[ @"one", @"two", nil];
    }
}
Run Code Online (Sandbox Code Playgroud)