Objective-C中的@ []和@ {}是什么?

时间:2012-11-28 14:09:35

标签: objective-c nsmutablearray equals nsmutabledictionary

  

可能重复:
  What are the details of “Objective-C Literals” mentioned in the Xcode 4.4 release notes?

我对@[]@{}提出了疑问。

一些代码来自互联网:

self.searches = [@[] mutableCopy]; 
self.searchResults = [@{} mutableCopy]; 
  1. @[]是否等于[NSMutableDictionary dictionary]
  2. @{}是否等于[NSMutableArray array]

3 个答案:

答案 0 :(得分:6)

  1. 否。 @[]等于[NSArray array][[NSArray alloc] init]
  2. 否。 @{}等于[NSDictionary dictionary][[NSDictionary alloc] init]
  3. (取决于上下文以及您是否使用Automatic Reference Counting (ARC)

    这就是为什么你有时会看到像[@[] mutableCopy]这样的东西。这将创建一个空的不可变数组并创建它的可变副本。

    结果与使用[NSMutableDictionary dictionary][[NSMutableDictionary alloc] init]相同。

答案 1 :(得分:1)

@{}等于[NSDictionary dictionary]

@[]等于[NSArray array]

所以[@[] mutableCopy]创建一个空的不可变对象,然后对它进行可变复制。我不认为你的效率会降低。

答案 2 :(得分:0)

第一个 @ [] 是创建数组的简写,例如以下两个元素的数组:

NSArray *array = @[ @"First", @"Second"];

第二个 @ {} 会创建一个字典,例如:

NSDictionary *dictionary = @{
    @"first" : someValue,
    @"second" : someValue,
};