2

我最近一直在使用 Objective-C,并且来自 C++ 世界,我没有为本地 Objective-C 集合指定容量的意义。

在 C++ 中,容器可以填充对象或引用类型(例如,引用包装器或指针),因此指定初始容量是有意义的,因为为一系列对象预分配内存可以大大提高性能。然而,在Objective-C 中,集合只能包含对动态分配对象的引用,即指针。因此,我想知道指定容量的性能优势是什么,在最坏的情况下,如果集合的大小超过原始容量,则只需要复制指针。

显然,我对内存模型缺乏了解,那么我缺少什么?

4

1 回答 1

3

许多 Cocoa 方法在 OS X 的初始版本中实现,并且很可能早在 OpenStep 甚至 NextStep 就已经实现。这意味着他们可能在过去最大化 25MHz 摩托罗拉 68030 32 位处理器的性能时发挥了重要作用。具有千兆字节内存和以千兆赫兹为单位的处理器周期的现代机器可能会宠坏初级程序员,但老手程序员已经在内存、CPU 功率和内存带宽比当今机器少几个数量级的机器上开发了许多高性能应用程序。通过提前分配所需的内存来节省数千个数组添加的内存重新分配时间可能非常有益。

对于无法简单地在 OP 的帖子中添加评论,我深表歉意,但我觉得遗留使用的想法需要一些额外的视角。检查标头并记下任何特定方法最初可用的时间总是很好的,因为它在过去可能具有重要意义。

更新:从我可以在公开维护的 NextStep 开发人员文档中在线找到的内容来看,看起来 NSMutableArray -initWithCapacity: 和 + arrayWithCapacity: 至少早在 1994 年就已在 NextStep 3.3 中实现。

于 2014-10-01T21:15:10.150 回答