可能重复:
NSMutableArray initWithCapacity nuances
Objective-c NSArray init versus initWithCapacity:0
以下代码行有什么区别?什么是确切的优势和劣势?假设接下来我将做3个addObject操作。
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity: 5];
NSMutableArray *array = [[NSMutableArray alloc] init];
答案 0 :(得分:8)
从功能上讲,两种陈述都是相同的。
在第一种情况下,您给运行时提供一个提示,即您很快就会向数组中添加五个对象,以便它可以(如果愿意的话)为它们预分配一些空间。这意味着使用第一个语句可以略微加快前五个addObject:
调用。
但是,不能保证运行时可以做任何事情而忽略提示。我自己从不使用initWithCapacity:
。如果我遇到addObject:
是一个重要性能瓶颈的情况,我可能会尝试看看情况是否有所改善。
答案 1 :(得分:5)
通常,面向对象语言和不同大小的数组之间的区别在于:您将获得的开销以及内存级别的页面错误。
以另一种方式设置这个想象你有一个对象在内存中请求5个空格(就像你的第一个例子),第二个对象不保留任何空间。因此,当需要将对象添加到第一个对象时,内存中已经存在空间以使其刚好落入,另一方面,非分配对象首先必须请求内存空间然后将其添加到阵列。这在这个级别听起来并不是那么糟糕,但是当你的阵列数量增加时,这变得更加重要。
arrayWithCapacity:
使用创建并返回NSMutableArray对象 足够分配的内存最初保存给定数量的对象。 ... 新阵列的初始容量。返回值一个新的NSMutableArray对象 足够的分配内存来容纳numItems对象。