【发布时间】:2012-11-04 13:18:40
【问题描述】:
NSMutableArray 是如何实现的?
如果有许多 NSMutableArray 对可变数组的引用,例如源数组和这些指向数组中的每一个对对象进行不同的排序,对象是复制到每个数组中还是对象指针只是在内部重新排列?
如果源数组用新对象更新,NSMutableArray 指针是否会自动将条目添加到它们的内部引用中。
【问题讨论】:
标签: objective-c nsmutablearray
NSMutableArray 是如何实现的?
如果有许多 NSMutableArray 对可变数组的引用,例如源数组和这些指向数组中的每一个对对象进行不同的排序,对象是复制到每个数组中还是对象指针只是在内部重新排列?
如果源数组用新对象更新,NSMutableArray 指针是否会自动将条目添加到它们的内部引用中。
【问题讨论】:
标签: objective-c nsmutablearray
它只存储指针。这意味着如果 NSMutableArray 存储不可变对象,那么您可以确定它们不会更改其状态,但如果它具有可变对象,则任何引用对象的状态都可能随时更改。
确切的我不知道它是怎么实现的,但我会说一个指向id的指针。它分配内存,然后在需要的索引处更新id:
id* pointers;
< Allocation>
pointers[i]= newObjectPointer;
【讨论】:
准确解析您所询问的场景有点困难,但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]
【讨论】: