通过mutableCopy或arrayWithArray创建带有文字的NSMutableArray:

时间:2012-09-28 17:02:01

标签: objective-c cocoa memory-management objective-c-literals

  

可能重复:
  Is literal creation of an NSMutableDictionary less efficient than the class helper method?

根据引入ObjectiveC文字的WWDC视频,NSMutableArray可以像这样初始化:

[NSMutableArray arrayWithArray:@[]];

但如果我们这样做会怎么样:

[@[] mutableCopy];

我知道一个是初始化数组,另一个是提供浅拷贝;因此内存管理是不同的。但是,如果我们使用ARC,使用后者有什么缺点?它更贵吗? ARC可能会以不同的方式处理,但我只是想知道使用mutableCopy是否更糟糕。

1 个答案:

答案 0 :(得分:6)

在前一种情况下,您最终会将两个对象添加到当前自动释放池中:NSArray文字和您正在从中创建的NSMutableArray。在后者中,文字NSArray被添加到自动释放池中,但是从它复制的NSMutableArray没有。所以第一种情况是稍微更糟,性能方面,因为耗尽自动释放池(例如在运行循环周期结束时)需要连续释放两个对象,而在第二种情况下copy将与autoreleased literal分开发布。在实践中,时差将是无穷小的。