gpt4 book ai didi

objective-c - 为什么在我向 NSMutableArray 添加更多对象后访问它会变得更快?

转载 作者:行者123 更新时间:2023-11-29 04:44:47 25 4
gpt4 key购买 nike

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

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

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

对于为什么会这样有什么想法吗?

最佳答案

这与 NSMutableArrayNSArray 的实现方式有关。

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

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

但是,当您处理 NSMutableArray 时,您处理的是一个链接列表,因为 NSMutableArray 需要对数组进行许多修改。因此,链表上的查找要长得多,因为您的对象不是以它们之间在内存中存在固定距离的方式存储的。

有关链接列表的更多信息,请查看 here .

关于objective-c - 为什么在我向 NSMutableArray 添加更多对象后访问它会变得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com