我是否可以快速提问:我只是对以下内容感到好奇(见下文)Xcode说“初始化元素不是常数”为什么这不起作用,我猜它是NSArray ......
static NSArray *stuffyNames = [NSArray arrayWithObjects:@"Ted",@"Dog",@"Snosa",nil];
这确实......
static NSString *stuffyNames[3] = {@"Ted",@"Dog",@"Snosa"};
加里
答案 0 :(得分:4)
因为你被称为一个返回数据的方法(+ arrayWithObjects) - 虽然结果是不可变的,但它实际上是动态生成的数据。
答案 1 :(得分:3)
静态局部变量在编译时初始化,因此它们的初始化程序也必须在编译时知道,这在第一个例子中显然不正确。
关于静态变量的静态变量可以在中初始化 他们的声明;然而 初始化器必须是常量 表达式和初始化是 在编译时只执行一次 内存是为静态分配的 变量
和more。
答案 2 :(得分:3)
是的,这是NSArray
。想想在编译时会发生什么。
在第二种情况下,它具有所需的所有信息。它有三个NSString
常量和一个C风格的数组来放入它们。
在你的第一行,你有一个带有四个参数的类方法的调用,所有这些参数恰好都是常量。就编译器而言,NSArray
与UIApplication
没有区别。这是一个带有参数的课程。你和我都知道它是一个数组,但它的实现是在Foundation库中,而不是语言的核心部分。