所有的集合类都有两个版本-可变和不可变,例如NSArray和NSMutableArray。区别仅仅是为了通过提供常量集合来促进仔细的编程,还是在使用可变对象而不是不可变对象时会影响性能?
类似地,每个集合类都有一个类似于[NSMutableArray arrayWithCapacity:0]的xxxxWithCapacity方法。我经常使用零作为参数,因为这似乎比错误地猜测可能添加了多少对象更好。提前创建一个具有足够对象容量的集合是否具有一定的性能优势?如果不是,为什么这个函数不像+ (id)emptyArray
发布于 2010-05-05 08:14:03
提前创建一个具有足够对象容量的集合是否具有一定的性能优势?
如果提前为可变数组预留空间,则不需要在添加对象时调整空数组或小数组的大小。调整大小可能涉及将对象保持在适当的位置,在堆上设置足够大的新空间块,然后可能将这些对象移动到内存中的新位置。
然而,如果你提前指定了你需要的空间,你就不需要调整大小了。你有一大块空间,你可以把物体放在里面。
发布于 2010-05-05 22:46:48
提前创建一个具有足够对象容量的集合是否具有一定的性能优势?
将元素添加到NSMutableArray时,阵列可能必须调整其存储区域的大小,以适应插入。通常,数组使用特定的算法以平衡的方式增长;增长到足以支持某些插入,但不会太多,以避免浪费内存。
当您大致知道要放入数组中的元素的数量时,通常使用"initWithCapacity:“。主要优点是存储分配只需执行一次,避免了不必要的大小调整。
这种存储大小调整可能会对性能产生影响(因为它意味着存储区域的扩展),但您应该根据需要进行微基准测试。
如果不是,为什么这个函数不像+(Id)
?
因为有+ (id)array,所以不需要+ (id)emptyArray
NSMutableArray *array = [NSMutableArray array];
[array addObject:[NSString string]];
[array removeAllObjects];https://stackoverflow.com/questions/2769773
复制相似问题