`arrayWithObjects`与新的Literal语法?

时间:2014-12-03 17:15:59

标签: ios objective-c literals

可以+[NSArray arrayWithObjects]和更新的文字语法产生不同的结果吗?

  1. 有任何概率,新语法会产生不同的结果吗?示例案例是3个字符串:

    return [NSArray arrayWithObjects:@"one", @"two", @"three", nil];

    return @[@"one", @"two", @"three"];

  2. 是否可以看到文字语法的宏代码,如果可以,在哪里? (如果这个问题毫无意义,请纠正我)

1 个答案:

答案 0 :(得分:6)

  1. 是的,有可能有所不同。考虑:

    NSString *v = nil;
    NSArray *a1 = @[ @"bob", v, @"fred" ];
    NSArray *a2 = [NSArray arrayWithObjects: @"bob", v, @"fred", nil];
    

    然后构建a1的尝试在运行时引发异常,程序崩溃,因为你试图在NSArray中包含nil。构造a2的尝试创建了一个项目@"bob"的数组,因为v中的nil终止了参数列表。

  2. 文字语法没有“宏代码”。它是编译器源代码的一部分,即C ++。请看method Sema::BuildObjCArrayLiteral in SemaExprObjC.cpp