我想知道这是否会严重影响性能或内存消耗。我需要一个 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/