2

我正在尝试修改一些使用 NSZoneMalloc 的旧代码。我在其中使用它的项目启用了不允许 NSZoneMalloc 的 ARC。

有问题的代码行是:

x = NSZoneMalloc([self zone], sizeof(*x));

是否有任何等效代码可以与 ARC 一起使用以消除错误?老实说,我不太了解内存分区。如果这还不够信息,请告诉我。

提前致谢

4

1 回答 1

5

一般来说,内存分区在现代并不那么重要。尽管它仍在某些地方使用,但您可以安全地将其替换为直的malloc().

区域历史上用于多个分配池以限制内存使用并增加重用和局部性。它们基本上在现代虚拟内存世界中变得无关紧要(即使在平台上,例如没有交换的iOS)。

然而,在过去,当您知道要回收大量相同类型的对象时,您可以使用区域,以将分配开销保持在最低限度。或者,您可以通过从特定的固定大小的池中分配某些对象来限制它们消耗过多的内存。

于 2012-06-01T11:27:29.750 回答