为什么在我添加更多对象后访问我的NSMutableArray会变得更快?

时间:2012-03-21 17:45:37

标签: objective-c ios

正在发生一些非常奇怪的事情。我按如下方式填充我的数组:

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];

然后在此之后,我可以按下按钮并立即访问信息(而在按钮按住很短的时间之前)。

关于为什么会这样的任何想法?

1 个答案:

答案 0 :(得分:1)

这与NSMutableArrayNSArray的实施方式有关。

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

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

但是,当您处理NSMutableArray时,您正在处理链接列表,因为NSMutableArray期望对数组进行许多修改。因此,链接列表上的查找要长得多,因为您的对象不会以内存中存在设置距离的方式存储。

有关链接列表的详细信息,请查看here