iphone - 如果我创建一个容量 = 3 而不是容量 = 50 的 NSMutableArray 有多大影响?

标签 iphone cocoa-touch arrays uikit

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

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:3];

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

最佳答案

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

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

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

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

关于iphone - 如果我创建一个容量 = 3 而不是容量 = 50 的 NSMutableArray 有多大影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308849/

相关文章:

objective-c - UITextView 子类作为自身的委托(delegate)

php - 在类内部调用数组值

iphone - IOS + phone-gap 应用程序开发中的 db 文件实用程序

iphone - 使用 CGShading 显示和排列颜色

iphone - 像 SQL 一样使用 Core Data 计算列

objective-c - iOS CGRectOffset 和核心数据问题

PHP foreach 返回多维数组中的最后一行

java - 如何生成一个介于 -1 和 1 之间的随机数?

iphone - 为 iPhone 创建 list (类似于 TouchCells 示例代码)应用程序时出现问题。检查随机细胞

iphone - 改变 iPhone 方向,然后再改回来,我的视野会减半吗?