如何在编译时填写NSArray?

时间:2012-06-15 12:43:07

标签: objective-c nsarray

在Objective-C中,如何做像

这样的事情
int array[] = {1, 2, 3, 4};

在纯C?

我需要用尽可能小的开销(代码和/或运行时)填充NSArray和NSStrings。

4 个答案:

答案 0 :(得分:7)

不可能像编译时那样创建一个数组。那是因为它不是“编译时间常数”。相反,你可以做类似的事情:

static NSArray *tArray = nil;

-(void)viewDidLoad {
    [super viewDidLoad];

    tArray = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
}

如果你预先编译了这个非常重要,那么我想你可以创建一个测试项目,创建你需要的数组(或任何对象),填充它,然后使用NSKeyedArchiver将其序列化(将它保存到文件中) ),然后在您的应用程序中包含该文件。然后,您需要使用NSKeyedUnarchiver来取消归档对象以供使用。我不确定这两种方法之间的性能差异。这种方法的一个优点是,如果需要初始化包含大量对象的数组,则没有大块代码。

答案 1 :(得分:-1)

使用此

NSArray *array = [NSArray arrayWithObjects:str1,str2,  nil];

答案 2 :(得分:-2)

据我所知,你需要一个一维数组 您可以使用NSArray的类方法。例如

NSString *yourString;
NSArray  *yourArray = [[NSArray alloc] initWithObjects:yourString, nil];

如果您需要更多内容,请详细说明您的问题

答案 3 :(得分:-2)

简单:NSArray<NSString*> *stringsArray = @[@"Str1", @"Str2", @"Str3", ...];现代ObjectiveC允许泛型和文字数组。

如果你想要更短的代码,那么NSArray *stringsArray = @[@"Str1", @"Str2", @"Str3", ...];,因为泛型是可选的,只有在访问数组元素时才有帮助,因此你可以稍后在代码中强制转换回模板化的数组。