objective-c - Objective-C 中的收集能力有什么意义?

标签 objective-c memory-management dynamic collections capacity

我最近一直在使用 Objective-C,并且来自 C++ 世界,我不明白为 native Objective-C 集合指定容量的意义。

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

显然,我对内存模型的理解缺乏,那么我错过了什么?

最佳答案

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

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

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

关于objective-c - Objective-C 中的收集能力有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132654/

相关文章:

c - 释放先前分配的内存后程序中止

dynamic - f# powerPack codeDom 中的 "CompileAssemblyFromSource"

python - 使用 Django 在 HTML 上动态变量值

c - 如何通过参数将二维矩阵传递给C中的函数

iOS 框架关系

objective-c - 使用蓝牙 4.0 在 iOS 设备之间交换数据

c++ - 使用不同分配器分配的内存

iphone - 在默认日历中添加特定日期作为事件

ios - 将文本从textview插入到字符串中,在字符串 objective-c 中返回NSMallocBlock

C快速排序结构导致段错误