Ios 从NSArray检索是否显示缓存位置?

Ios 从NSArray检索是否显示缓存位置?,ios,objective-c,arrays,caching,Ios,Objective C,Arrays,Caching,当循环通过一个普通的C数组时,CPU会智能地从RAM中抓取周围的单元,并将它们粘贴到CPU缓存中。CPU知道,如果要获取索引6,很可能很快就会需要索引7。也存在Objective-C NSArray吗 for(数组中的id项){ NSLog(@“%@”,项目); } 对于(整数i=0;i

当循环通过一个普通的C数组时,CPU会智能地从RAM中抓取周围的单元,并将它们粘贴到CPU缓存中。CPU知道,如果要获取索引6,很可能很快就会需要索引7。也存在Objective-C NSArray吗

for(数组中的id项){
NSLog(@“%@”,项目);
}
对于(整数i=0;i

在苹果公司以外工作的人没有NSArray的内部实现。但是,人们可以猜测,NSMutableArray可能是通过链表实现的,因为它有从任何索引中切片数组的方法。如果我们假设NSArray与NSMutableArray由同一个数据存储支持,那么所有NSArray都不会显示r的位置参考


我询问的原因是,我正在通过将高度存储在缓存中来优化UITableViewCell高度计算。缓存作为NSMutableDictionary比NSMutableArray更容易实现,因此我不必处理数组中的间隙(这是不允许的)。如果NSArray提供引用的局部性,那么我将切换到NSArray以获得额外的性能并承受这种额外的复杂性。

a)这不是CPU智能,而是缓存级别和内存页大小。b) 为什么不先用简单的方法来实现呢?我很难想象,在单元格高度上查找字典将成为应用程序的关键性能部分!“NSMutableArray很可能是通过链表实现的,因为它有从任何索引中分割数组的方法。”–嗯,什么?首先,它不是,它是作为一个循环缓冲区实现的;第二,为什么你会从这个前提下得出这个结论…?!“在苹果以外工作的人没有NSArray的内部实现。”NSArray的底层实现是CFArray,它是开源的。我们绝对有执行力。顺便说一句,您做了哪些基线性能评测来确定这是您的瓶颈,并且可以用来比较您的改进?相信“引用的局部性”不足以使您注入复杂性。您需要编写测试代码,以证明复杂性在实际代码中提供了实际好处。在我的经验中,试图超越基金会往往会导致更慢的结果;您必须非常仔细地测试,以确保看到真正的改进。@ParamagneticCroissant另一个人说NSMutableArray是通过一个链接列表实现的:
for (id item in array) {
  NSLog(@"%@", item);
}

for (NSUInteger i = 0; i < array.count; i++) {
  NSLog(@"%@", array[i];
}