Dan*_*ark -1 objective-c literals ios
可以+[NSArray arrayWithObjects]和更新的文字语法产生不同的结果吗?
是否有任何的新语法产生不同的结果的机会?示例是3个字符串:
return [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
与
return @[@"one", @"two", @"three"];
是的,有可能产生差异.考虑:
NSString *v = nil;
NSArray *a1 = @[ @"bob", v, @"fred" ];
NSArray *a2 = [NSArray arrayWithObjects: @"bob", v, @"fred", nil];
Run Code Online (Sandbox Code Playgroud)
然后构造的尝试a1在运行时引发异常并且程序崩溃,因为你试图在一个中包含nil NSArray.构造的尝试a2创建了一个项目的数组@"bob",因为nil v终止了参数列表.
文字语法没有"宏代码".它是编译器源代码的一部分,即C++.再看方法Sema::BuildObjCArrayLiteral在SemaExprObjC.cpp.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |