为什么访问我的NSMutableArray变得更快,一旦我添加更多的对象呢?

很奇怪的事情正在发生。 我填充我的数组,如下所示:

self.workingWithItemCollectionArray = [NSMutableArray arrayWithCapacity:self.itemCollectionArray.count]; self.workingWithItemCollectionArray = [[self.itemCollectionArray mutableCopy]autorelease]; 

它采用原始NSArray的可变副本,并将其传递给NSMutableArray 。 当通过点击一个UIButton访问这个数组中包含的信息时,在检索信息时会有一些延迟。

但是,当我然后更改原始数组添加更多的项目,然后将其传递到可变数组:

 NSMutableArray *editedOriginalArray = [NSMutableArray arrayWithArray:self.itemCollectionArray]; [editedOriginalArray addObjectsFromArray:extraObjectsToAdd]; self.itemCollectionArray = [NSArray arrayWithArray:editedOriginalArray]; self.workingWithItemCollectionArray = [NSMutableArray arrayWithCapacity:self.itemCollectionArray.count]; self.workingWithItemCollectionArray = [[self.itemCollectionArray mutableCopy]autorelease]; 

然后在这之后,我可以按下button,信息立即被访问(而在button保持很短的时间之前)。

任何想法,为什么这可能是?

它与NSMutableArray如何实现与NSArray

因为NSArray是不可变的,所以对象在字面上被内部存储在一个数组中,例如:

 id *objects = malloc(sizeof(id) * count); 

但是,当你处理NSMutableArray ,你正在处理一个链表,因为NSMutableArray需要对数组进行很多修改。 所以,链表上的查找时间要长得多,因为你的对象不是以存储器之间存在一定距离的方式存储的。

有关链接列表的更多信息,请点击此处 。