【问题标题】:what is the use of @[ ] in objective c [duplicate]目标c中@[]的用途是什么[重复]
【发布时间】:2013-03-26 11:13:48
【问题描述】:

见过

NSArray *objectsToShare = @[objects];

查看一些示例代码时。

这里@[objects]是什么意思?

【问题讨论】:

    标签: iphone objective-c ios5 ios6 nsarray


    【解决方案1】:
    NSArray *objectsToShare = @[objects];
    

    相同
    NSArray *objectsToShare = [NSArray arrayWithObjects:objects count:count];
    

    【讨论】:

    • 严格来说和initWithObjects不一样,而是arrayWithObjects:count:(比较stackoverflow.com/a/14527582/1187415)。它返回一个自动释放的对象,列表中nil的处理方式不同。
    【解决方案2】:

    在 Objective-C 中也称为 Literals

    Examples
    Immutable array expression:
    NSArray *array = @[ @"Hello", NSApp, [NSNumber numberWithInt:42] ];
    

    当使用 Apple LLVM 编译器 4.0 or later 时,数组、字典和数字 (NSArray, NSDictionary, NSNumber classes) 也可以使用文字语法而不是方法来创建。[22]文字语法使用 @ 符号[], {}, (), 结合。

    没有文字的例子:

    NSArray *myArray = [NSArray arrayWithObject:someObject];
    NSDictionary *myDictionary = [NSDictionary dictionaryWithObject:someObject forKey:@"key"];
    NSNumber *myNumber = [NSNumber numberWithInt:myInt];
    

    文字示例:

    NSArray *myArray = @[ someObject ];
    NSDictionary *myDictionary = @{ @"key" : someObject };
    NSNumber *myNumber = @(myInt);
    
    
    objc-at-expression : '@' (string-literal | encode-literal | selector-literal | protocol-literal | object-literal)
                       ;
    
    object-literal : ('+' | '-')? numeric-constant
                   | character-constant
                   | boolean-constant
                   | array-literal
                   | dictionary-literal
                   ;
    
    boolean-constant : '__objc_yes' | '__objc_no' | 'true' | 'false'  /* boolean keywords. */
                     ;
    
    array-literal : '[' assignment-expression-list ']'
                  ;
    
    assignment-expression-list : assignment-expression (',' assignment-expression-list)?
                               | /* empty */
                               ;
    
    dictionary-literal : '{' key-value-list '}'
                       ;
    
    key-value-list : key-value-pair (',' key-value-list)?
                   | /* empty */
                   ;
    
    key-value-pair : assignment-expression ':' assignment-expression
                   ;
    

    欲了解更多信息Read this Tutorial

    【讨论】:

    • @Downvoter 请留下评论为什么投反对票,然后用户可以在需要的地方改进答案。
    • +1 来自我,因为你的答案通常都很好,我看不出有什么问题,所以不要相信你应该为此投反对票。
    • 很好的概括性解释,可以帮助读者理解这并不归于数组。谢谢。
    【解决方案3】:

    它用一个对象创建一个数组,即对象“objects”

    【讨论】:

      【解决方案4】:

      这是添加到 LLVM 编译器的新功能。您可以使用

      创建一个数组
      NSArray *array = @[object1, ...];
      

      请注意,您不能创建可变数组,并且您不需要以nil 结束对象列表。观看 WWDC 2012 视频“LLVM 的新功能”。

      【讨论】:

        猜你喜欢
        • 2011-04-07
        • 2011-01-30
        • 2016-10-29
        • 2014-01-15
        • 2012-05-06
        • 2014-08-28
        • 2017-03-01
        • 2011-02-22
        • 1970-01-01
        相关资源
        最近更新 更多