Objective c 如何初始化NSString的数组?

Objective c 如何初始化NSString的数组?,objective-c,Objective C,在目标C中初始化NSStrings数组最简单/最快的方法是什么?NSArray*array=@[@“foo”,@“bar”] NSArray *array = [NSArray arrayWithObjects:@"String1",@"String2",@"String3",nil]; C方式: NSString *s1, *s2; NSString *cArray[]={s1, s2}; cArray的大小为2,由编译器定义。 更多信息请点击此处: NSArray(目标C)方式:

在目标C中初始化
NSString
s数组最简单/最快的方法是什么?

NSArray*array=@[@“foo”,@“bar”]

    NSArray *array = [NSArray arrayWithObjects:@"String1",@"String2",@"String3",nil];
    
  • C方式:

    NSString *s1, *s2;
    NSString *cArray[]={s1, s2};
    
    cArray的大小为2,由编译器定义。
    更多信息请点击此处:

  • NSArray(目标C)方式:

  • 如果您使用的是XCode4(LLVM4.0编译器),现在可以使用NSArray文本:

    NSArray *array = @[ @"1", @"2" ];
    
    更多信息请点击此处:


那么,如果我指定了尺寸,那么我不需要在最后加上nil?为什么?前面的答案是针对NSArray的,这是针对C数组的。它们完全不同,理解它们之间的差异是objective-c编程的一个基本要求。将对象存储在c数组中比存储在c数组中更加困难,这说明了一些问题。告诉新手开发人员创建NSObject的c数组是一个非常糟糕的建议。唯一能正常工作的方法是使用字符串文本(如
@“someString”)创建字符串常量
。如果您尝试使用ARC中动态分配的
NSString
对象执行此操作,则C数组将不会持有对字符串的强引用,并且当对字符串的最后一个强引用超出范围时,这些字符串将被解除分配,而C数组将是一个包含无效内存地址的数组。(一系列“僵尸”)我最终能摆脱零吗?我想没有,但为什么我必须在最后添加它?这只是表明您没有更多的元素要添加。我想这是一种空终止符。@user680406:具有可变参数数的函数或方法无法知道传递给它的参数数(这只是C编程语言的一个限制)。因此,由于NSArray不能包含
nil
,它将
nil
解释为变量参数列表的一部分,意思是“好的,这就是所有参数”。这称为“哨兵值”。如果没有nil来告诉它参数的结束位置,它就不知道如何继续遍历内存,尝试将遇到的所有内容都视为要添加到数组中的对象,直到遇到0或nil。
NSArray *objCArray = [NSArray arrayWithObjects:@"1", @"2", nil];
NSArray *array = @[ @"1", @"2" ];