可以+[NSArray arrayWithObjects]
和更新的文字语法产生不同的结果吗?
有任何概率,新语法会产生不同的结果吗?示例案例是3个字符串:
return [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
与
return @[@"one", @"two", @"three"];
答案 0 :(得分:6)
是的,有可能有所不同。考虑:
NSString *v = nil;
NSArray *a1 = @[ @"bob", v, @"fred" ];
NSArray *a2 = [NSArray arrayWithObjects: @"bob", v, @"fred", nil];
然后构建a1
的尝试在运行时引发异常,程序崩溃,因为你试图在NSArray
中包含nil。构造a2
的尝试创建了一个项目@"bob"
的数组,因为v
中的nil终止了参数列表。
文字语法没有“宏代码”。它是编译器源代码的一部分,即C ++。请看method Sema::BuildObjCArrayLiteral
in SemaExprObjC.cpp
。