0

NSMutableArray 是如何实现的?

如果有许多 NSMutableArray 对可变数组的引用,例如源数组,并且这些指向数组中的每一个对对象进行不同的排序,是对象复制到每个数组中还是对象指针只是在内部重新排列?

如果源数组使用新对象更新,NSMutableArray 指针是否会自动将条目添加到其内部引用。

4

2 回答 2

1

准确解析您所询问的场景有点困难,但NS(Mutable)Array包含一个对象引用列表。它不会复制您添加到其中的对象,只是保留一个指针。如果这些对象可以更改,并且您从数组外部更改它们,那将反映在您从数组中读回的内容中。

NSMutableArray * arr = [NSMutableArray array];
NSMutableArray * child = [NSMutableArray array];
[child addObject:@5];
[arr addObject:child];
[child addObject:@6];
NSLog(@"%@", arr[0]);
> [5, 6] 
于 2012-11-15T20:57:54.770 回答
1

它只存储指针。这意味着如果 NSMutableArray 存储不可变对象,那么您可以确定它们不会更改其状态,但如果它具有可变对象,则任何引用对象的状态都可能随时更改。
确切地说,我不知道它是如何实现的,但我会说一个指向 id 的指针。它分配内存,然后在需要的索引处更新 id:

id* pointers;
< Allocation>
pointers[i]= newObjectPointer;
于 2012-11-15T21:01:41.120 回答