首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我用capacity=3而不是capacity=50来创建NSMutableArray,这有多重要?

如果我用capacity=3而不是capacity=50来创建NSMutableArray,这有多重要?
EN

Stack Overflow用户
提问于 2009-08-20 21:12:29
回答 5查看 4.9K关注 0票数 10

我想知道这是否会对性能或内存消耗产生很大影响。我需要一个NSMutableArray,一开始我只能猜测要添加多少个对象。大约3到5个人。所以我这样创建它:

代码语言:javascript
复制
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:3];

例如,当创建容量为3而不是50时,这里到底会发生什么?在知道至少有20个元素的情况下,创建容量为1的它是不是一个坏主意?或者,这还不够让人头疼吗?我的应用程序中有大约10个这样的数组,它们都必须在开始时加载。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-20 21:20:32

initWithCapacity将导致NSMutableArray为该数量的元素预先分配空间。

将更多数据推送到超出该容量的NSMutableArray中将导致NSMutableArray重新分配其底层内存。这种重新分配还需要将整个数组从旧的(较小的)分配复制到新的(较大的)分配。因此,将这个数字设置得太小会造成性能损失,但不会太大。

指定一个大于实际使用量的容量会浪费内存,因为会有内存分配给永远不会使用的项目。

我的建议是,如果您知道数组的大小通常不会超过N项,请调用initWithCapacity:N。偶尔出现大于N的NSMutableArray的性能损失是可以接受的,而且您不必为那些没有超过该限制的数组付出代价。

票数 9
EN

Stack Overflow用户

发布于 2009-08-20 21:15:35

这没什么大不了的,除非你说的是极端的重复或者巨大的数组。除非它成为真正的瓶颈,否则不值得尝试优化。

编辑:我想引用Donald Knuth的话:

过早优化是万恶之源。

票数 6
EN

Stack Overflow用户

发布于 2009-08-20 21:16:33

有理论上的答案和实际的答案。从理论上讲,设置更大的容量可能会改变数组的分配和存储策略(尽管在内部称为"NSArray“,但结构要比这复杂一点)。

从实际的角度来看,数组将根据需要重新分配,对于您所讨论的数字,我怀疑是否会有任何区别。如果我知道我会把成千上万的东西放进去,我可能会做一个arrayWithCapacity。3对50基本上是没有意义的。

从我的角度来看,"withCapacity“最好的用处就是提供一个明显的钩子来挂起您的假设,这样您就可以(例如)拥有代码中的文档,这些文档是您以后可能想要断言的。但这绝对不是必需的。

从实践的角度来看,最好的利用你的时间是甚至不去想这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1308849

复制
相关文章

相似问题

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