igu*_*222 33 iphone cocoa cocoa-touch nsmutablearray nsarray
我正在使用一个数组来存储从我的iPhone应用程序中的数据库加载的缓存对象,并且想知道:使用我应该知道的NSMutableArray有什么明显的缺点吗?
编辑:我知道NSMutableArray可以修改,但我正在寻找具体的原因(性能等),为什么会使用NSArray.我认为会有性能差异,但我不知道它是否重要.
zad*_*adr 50
如果您正在从数据库加载对象并且您确切知道有多少对象,那么您可能会从NSMutableArrays arrayWithCapacity:方法获得最佳性能,并向其添加对象直到完全,因此如果可以,它会立即分配所有内存.
在幕后,它们是秘密相同的东西 - *NSArray并且NSMutableArray都是CFArray通过免费桥接实现的(a CFMutableArrayRef和a CFArrayRef是同一类型的typedef __CFArray *)
NSArray并且NSMutableArray应该具有相同的性能/复杂性(最坏的访问时间为O(lg N),最好是O(1)),唯一的区别是两个对象将使用多少内存 - NSArray具有固定限制,同时NSMutableArray可以用完尽可能多的空间,你有自由.
CFArray.h中的注释更详细.
*:正如Catfish_Man指出的那样,这不再适用.
NSR*_*der 25
使用NSArray与NSMutable数组的性能差异主要出现在使用想要复制数组的API时.如果你发送-copy到一个不可变数组,它只是颠覆了保留计数,但是发送-copy到一个可变数组会分配堆内存.
主要缺点NSMutableArray是NSMutableArray如果另一个对象也拥有它,那么拥有a的对象可能会在其后面更改数组.这可能要求您在防御性方面对对象进行编码,而不是积极地追逐性能.
如果NSMutableArray没有暴露在物体外面,这不是一个问题.
NSArray是一个更好的分享选择,正是因为它是不可改变的.使用它的每个对象都可以认为它不会改变,也不需要防御性地复制它.
这可能与NSDictionary复制其密钥的原因相同,而不是简单地保留它们:它需要确保它们不会发生变异,并且复制是保证这一点的唯一方法.
| 归档时间: |
|
| 查看次数: |
12502 次 |
| 最近记录: |