[[NSMutableArray alloc] init];和[[NSMutableArray alloc] initWithCapacity:0]区别

区别:第一个你创建NSMutableArray对象,它容纳对象个数是默认的。如果你知道最大需要的容量,那么就使用initWithCapacity:来设置,好处就是当元素个数不超过容量时,添加元素不需要重新分配内存。在with capacity的情况下,在初始化的时候分配的内存为n*sizeof(elem)--假设capacity为n。如果在使用的过程中需要加入更多的元素需要给array扩容了,那么必须去找系统再次要求分配内存,而这次要求的内存的大小和扩容因子有关系,如果扩容因子为2,那么扩容之后总共分配的堆内存就成了2n*sizeof(elem)..扩容因子应该自己可以指定吧一般。 

好处是:如果指定capacity,而且元素数量没有超过这个值的话就不需要老是欲求不满找系统要内存,而找系统要内存这个操作会带来一定的系统开销(涉及到系统调用,当然我们使用起来事实上是感受不到这个区别的)。  
缺点是:如果实际元素个数也capacity相差甚远就浪费了内存空间。  

所以这里有个tradeoff,要根据实际情况来操作。 
在without capacity的情况下,事实上应该也是有个默认的capacity的,具体是多少应该和实现有关系,一般来说是10/12大约?

iOS:NSMutableArray alloc/init 和 arrayWithObjects 之间的区别

答:一个是创建对象以后用对象消息初始化,另一个是直接用类消息创建对象+初始化。后者显然写着省事点

有这么几点,知道就好了,这个不必深究的:
1,initWithCapacity:10 并不代表里面的object数量不能大于10.也可以大于10.
2,init是在告诉程序,“我不知道要放多少object,暂且帮我初始化”。
3,如果你知道大概要放多少东西,那么最好用initWithCapacity,这个会提高程序内存运用效率。
4,如果你初始化了NSMutableDictionary,并且很长时间不会用到,建议用initWithCapacity:0。
posted @ 2015-06-11 16:43  anjing123  阅读(1361)  评论(0编辑  收藏  举报