10 arrays iphone cocoa-touch uikit
我想知道这是否会影响性能或内存消耗.我需要一个NSMutableArray,并且在开始时我只能猜测将添加多少个对象.大概3到5个.所以我这样创建它:
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:3];
Run Code Online (Sandbox Code Playgroud)
例如,当创建容量为3而不是50时,这里会发生什么?当知道至少有20个元素时,创建容量为1是不是一个坏主意?或者这不足以让人头疼吗?我在我的应用程序中有10个这样的数组,他们都必须在开始时加载.
initWithCapacity将导致NSMutableArray为该数量的元素预分配空间.
将更多数据推送到NSMutableArray超出该容量的范围将导致NSMutableArray重新分配其底层内存.这种重新分配还需要将整个阵列从旧(较小)分配复制到新(较大)分配.因此,对于使这个数字太小而存在性能损失,但不是很多.
指定一个大于实际使用容量的容量会浪费内存,因为将为永远不会使用的项目分配内存.
我的建议是,如果您知道阵列的大小通常不会超过N个项目,请致电initWithCapacity:N.偶尔NSMutableArray大于N 的性能损失是可以接受的,并且对于那些没有超过该限制的阵列,您将不必为此付出代价.
除非你谈论极端重复或巨大阵列,否则这不是什么大问题.除非它成为真正的瓶颈,否则不值得尝试进行优化.
编辑:我想添加唐纳德克努特的一句话:
过早优化是万恶之源.
| 归档时间: |
|
| 查看次数: |
4587 次 |
| 最近记录: |