目标c中@ []的用途是什么

San*_*tix 4 iphone objective-c nsarray ios5 ios6

我见过

NSArray *objectsToShare = @[objects];
Run Code Online (Sandbox Code Playgroud)

在查看一些示例代码时.

这是什么意思@[objects]

Dru*_*erB 8

NSArray *objectsToShare = @[objects];
Run Code Online (Sandbox Code Playgroud)

是相同的

NSArray *objectsToShare = [NSArray arrayWithObjects:objects count:count];
Run Code Online (Sandbox Code Playgroud)

  • 严格来说,它与`initWithObjects`不同,但是`arrayWithObjects:count:`(比较http://stackoverflow.com/a/14527582/1187415).它返回一个自动释放的对象,列表中"nil"的处理方式不同. (4认同)

iPa*_*tel 6

它在Objective-C中也被称为文字

Examples
Immutable array expression:
NSArray *array = @[ @"Hello", NSApp, [NSNumber numberWithInt:42] ];
Run Code Online (Sandbox Code Playgroud)

使用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];
Run Code Online (Sandbox Code Playgroud)

文字示例:

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
               ;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请阅读本教程