Ios NSMutableArray如何更改使用removeObjectAtIndex的对象索引?

Ios NSMutableArray如何更改使用removeObjectAtIndex的对象索引?,ios,objective-c,nsarray,Ios,Objective C,Nsarray,使用NSMutableArray时,我可以添加object:然后使用removeObjectAtIndex:0删除前面的对象。从文档中: 为了填补空白,索引之外的所有元素都通过从其索引中减去1来移动 这意味着,索引2处的对象变为1,3变为2,等等。这是否意味着每个对象都被移动到索引1,或者索引值被更新为索引1,并且0位置为空 我知道后者听起来有多愚蠢,但那一行给我的印象是,这就是正在发生的事情。至于你的实际问题,不,数组中永远不会有空白。NSArray不能保存nil值。与NSPointerArr

使用NSMutableArray时,我可以添加object:然后使用removeObjectAtIndex:0删除前面的对象。从文档中:

为了填补空白,索引之外的所有元素都通过从其索引中减去1来移动

这意味着,索引2处的对象变为1,3变为2,等等。这是否意味着每个对象都被移动到索引1,或者索引值被更新为索引1,并且0位置为空


我知道后者听起来有多愚蠢,但那一行给我的印象是,这就是正在发生的事情。

至于你的实际问题,不,数组中永远不会有空白。NSArray不能保存nil值。与NSPointerArray进行比较和对比


Re:你的标题,内存的实际分配和释放是一个不透明的实现细节,数组可以使用任何类型的内部存储—C数组、链表,任何东西。当其他人已经通过评论回答了这个问题时,我认为这是一个值得回答的问题,并提供了一个链接,以查看NSArray的性能特征,并表明内部正在使用一种非琐碎的方法,由于性能根据枚举类型进行不同的缩放。

至于您的实际问题,不,数组中永远不会有间隙。NSArray不能保存nil值。与NSPointerArray进行比较和对比


Re:你的标题,内存的实际分配和释放是一个不透明的实现细节,数组可以使用任何类型的内部存储—C数组、链表,任何东西。当其他人已经通过评论回答了这个问题时,我认为这是一个值得回答的问题,并提供了一个链接,以查看NSArray的性能特征,并表明内部正在使用一种非琐碎的方法,由于性能根据枚举类型进行不同的扩展。

与大多数阵列实现一样,NSMutableArray可能知道它正在存储的对象的大小以及它正在存储的对象的总数。有了这些知识,它就可以合理地进行指针运算来访问感兴趣的对象。但是,如果您真的有兴趣了解NSMutableArray是如何工作的,我建议您检查一下CFArray,它是NSMutableArray的CoreFoundation变体。您可以在此处检查开放源代码:


与大多数阵列实现一样,NSMutableArray可能知道它正在存储的对象的大小以及它正在存储的对象的总数。有了这些知识,它就可以合理地进行指针运算来访问感兴趣的对象。但是,如果您真的有兴趣了解NSMutableArray是如何工作的,我建议您检查一下CFArray,它是NSMutableArray的CoreFoundation变体。您可以在此处检查开放源代码:


数组不能有间隙。调用-removeObjectAtIndex后将不会有任何空插槽:如果您仔细想想,给出的描述无论如何都不允许有任何漏洞。你可以在纸上试试看。如果你想知道存储是如何工作的,你必须查看源代码CoreFoundation。。。但是你真的不必担心。你的问题和题目有什么关系?你的标题和问题完全不同。下面的链接中有一篇精彩的文章,探讨了NSMutableArray的内部结构;数组不能有间隙。调用-removeObjectAtIndex后将不会有任何空插槽:如果您仔细想想,给出的描述无论如何都不允许有任何漏洞。你可以在纸上试试看。如果你想知道存储是如何工作的,你必须查看源代码CoreFoundation。。。但是你真的不必担心。你的问题和题目有什么关系?你的标题和问题完全不同。下面的链接中有一篇精彩的文章,探讨了NSMutableArray的内部结构;说得好,我更新了标题,因为它似乎偏离了问题。说得好,我更新了标题,因为它似乎偏离了问题。对不起,我想我的标题可能误导了你。我已经对其进行了更新,使其与问题的描述相匹配。这似乎和我想知道的不一样。对不起,我想我的标题可能误导了你。我已经对其进行了更新,使其与问题的描述相匹配。这似乎和我想知道的不一样。