Objective-C的收集能力有哪些?

时间:2014-10-01 01:13:10

标签: objective-c memory-management dynamic collections capacity

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

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

显然,我对内存模型的理解不足,所以我缺少什么?

1 个答案:

答案 0 :(得分:3)

许多Cocoa方法在OS X的初始版本中实现,很可能早在OpenStep甚至NextStep中实现。这意味着他们可能在最大化过去25MHz Motorola 68030 32位处理器的性能时发挥了重要作用。初学程序员可以被具有千兆字节内存和千兆字节测量的处理器周期的现代机器所破坏,但是年纪较大的资深程序员已经在机器上开发了许多高性能应用程序,其内存,CPU功率和内存带宽比现在的机器少了几个数量级。通过提前分配所需的内存来节省数千个阵列添加的内存重新分配时间可能是非常有益的。

我为不能简单地在OP的帖子中添加评论而道歉,但我觉得遗留用法的想法需要一些额外的观点。检查标题并注意何时最初提供任何特定方法总是好的,因为它可能在过去具有重要意义。

更新:根据我在公开维护的NextStep开发人员文档中的在线定位,看起来像NSMutableArray -initWithCapacity:和+ arrayWithCapacity:至少可以在1994年的NextStep 3.3中实现。