`arrayWithObjects`与新的Literal语法?

Dan*_*ark -1 objective-c literals ios

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

  1. 是否有任何的新语法产生不同的结果的机会?示例是3个字符串:

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

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

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

rob*_*off 6

  1. 是的,有可能产生差异.考虑:

    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终止了参数列表.

  2. 文字语法没有"宏代码".它是编译器源代码的一部分,即C++.再看方法Sema::BuildObjCArrayLiteralSemaExprObjC.cpp.

  • 对.虽然如果您发布了确切的代码会很有帮助. (2认同)