首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone基础-可变和xxxWithCapacity的性能影响:0

iPhone基础-可变和xxxWithCapacity的性能影响:0
EN

Stack Overflow用户
提问于 2010-05-05 08:08:13
回答 2查看 132关注 0票数 1

所有的集合类都有两个版本-可变和不可变,例如NSArray和NSMutableArray。区别仅仅是为了通过提供常量集合来促进仔细的编程,还是在使用可变对象而不是不可变对象时会影响性能?

类似地,每个集合类都有一个类似于[NSMutableArray arrayWithCapacity:0]的xxxxWithCapacity方法。我经常使用零作为参数,因为这似乎比错误地猜测可能添加了多少对象更好。提前创建一个具有足够对象容量的集合是否具有一定的性能优势?如果不是,为什么这个函数不像+ (id)emptyArray

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-05 08:14:03

提前创建一个具有足够对象容量的集合是否具有一定的性能优势?

如果提前为可变数组预留空间,则不需要在添加对象时调整空数组或小数组的大小。调整大小可能涉及将对象保持在适当的位置,在堆上设置足够大的新空间块,然后可能将这些对象移动到内存中的新位置。

然而,如果你提前指定了你需要的空间,你就不需要调整大小了。你有一大块空间,你可以把物体放在里面。

票数 1
EN

Stack Overflow用户

发布于 2010-05-05 22:46:48

提前创建一个具有足够对象容量的集合是否具有一定的性能优势?

将元素添加到NSMutableArray时,阵列可能必须调整其存储区域的大小,以适应插入。通常,数组使用特定的算法以平衡的方式增长;增长到足以支持某些插入,但不会太多,以避免浪费内存。

当您大致知道要放入数组中的元素的数量时,通常使用"initWithCapacity:“。主要优点是存储分配只需执行一次,避免了不必要的大小调整。

这种存储大小调整可能会对性能产生影响(因为它意味着存储区域的扩展),但您应该根据需要进行微基准测试。

如果不是,为什么这个函数不像+(Id)

因为有+ (id)array,所以不需要+ (id)emptyArray

代码语言:javascript
复制
NSMutableArray *array = [NSMutableArray array];
[array addObject:[NSString string]];
[array removeAllObjects];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2769773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档