初始化器不是恒定的?

时间:2010-05-14 12:30:15

标签: iphone objective-c cocoa-touch

我是否可以快速提问:我只是对以下内容感到好奇(见下文)Xcode说“初始化元素不是常数”为什么这不起作用,我猜它是NSArray ......

static NSArray *stuffyNames = [NSArray arrayWithObjects:@"Ted",@"Dog",@"Snosa",nil];

这确实......

static NSString *stuffyNames[3] = {@"Ted",@"Dog",@"Snosa"};

加里

3 个答案:

答案 0 :(得分:4)

因为你被称为一个返回数据的方法(+ arrayWithObjects) - 虽然结果是不可变的,但它实际上是动态生成的数据。

答案 1 :(得分:3)

静态局部变量在编译时初始化,因此它们的初始化程序也必须在编译时知道,这在第一个例子中显然不正确。

  

静态变量可以在中初始化   他们的声明;然而   初始化器必须是常量   表达式和初始化是   在编译时只执行一次   内存是为静态分配的   变量

关于静态变量的

more

答案 2 :(得分:3)

是的,这是NSArray。想想在编译时会发生什么。

在第二种情况下,它具有所需的所有信息。它有三个NSString常量和一个C风格的数组来放入它们。

在你的第一行,你有一个带有四个参数的类方法的调用,所有这些参数恰好都是常量。就编译器而言,NSArrayUIApplication没有区别。这是一个带有参数的课程。你和我都知道它是一个数组,但它的实现是在Foundation库中,而不是语言的核心部分。