C数组vs Obj-C数组

时间:2011-03-07 23:22:17

标签: objective-c c arrays malloc

使用alloc init在Objective-C中创建数组时,如何在将对象添加到数组时管理内存?

我想知道在创建数组和malloc时这与C的关系,分配的大小需要是预期数组的大小,或者需要重新分配数组内存。

这些是如何相关的,或者是什么是理解C代码工作方式的好方法。

在添加对象时,是否可以在内部处理objective-c数组内存,或者这是如何工作的?

2 个答案:

答案 0 :(得分:2)

Objective-C数组遵循与其他Objective-C对象相同的内存管理规则。如果你分配它,你需要释放它。

C数组和Objective-C数组在概念上类似,但实现方式完全不同。 C数组是一个连续的内存块,除了控制如何使用它的语言结构之外几乎没有。 Objective-C数组是具有重要内置功能的对象。它们动态调整自身大小(如果它们是可变的)以容纳添加的元素。它们可以正确地保留和释放它们存储的对象。他们可以对自己进行排序,过滤自己,插入对象,删除对象等。您不应该对它们的实现方式做出任何假设。

Apple的文档应该可以让您更好地了解Objective-C数组的可能性(当您使用它时,也可以查看其他集合类)。从这里开始阅读: Collections Programming Topics

答案 1 :(得分:1)

NSArrays(以及扩展名为NSMutableArrays)保留添加到它们的对象,并在释放数组本身时向它们发送所有释放消息。

这样做的结果是一个常见的模式是分配一个对象,初始化它,将它交给数组,然后释放它。由于数组为自己保留它,它将持续与数组本身一样长,或者直到你指示数组去掉它。你将永远不需要发送另一个发布消息,阵列机制负责处理。

我猜想Mutable数组的实现类似于链表,因此可以在以后轻松扩展和收缩。它只是一个指针列表,可能还有一些元数据。由于它不会创建任何传递给它的对象,所以只需将它自己的皮带放在它们上面,它需要做的就是指向对象的指针。