正在发生一些非常奇怪的事情。我按如下方式填充我的数组:
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];
然后在此之后,我可以按下按钮并立即访问信息(而在按钮按住很短的时间之前)。
关于为什么会这样的任何想法?
答案 0 :(得分:1)
这与NSMutableArray
与NSArray
的实施方式有关。
因为NSArray
是不可变的,所以对象在字面上内部存储在一个数组中,例如:
id *objects = malloc(sizeof(id) * count);
但是,当您处理NSMutableArray
时,您正在处理链接列表,因为NSMutableArray
期望对数组进行许多修改。因此,链接列表上的查找要长得多,因为您的对象不会以内存中存在设置距离的方式存储。
有关链接列表的详细信息,请查看here。