我正在尝试改编一些使用NSZoneMalloc的旧代码。我正在其中使用的项目已启用ARC,这不允许使用NSZoneMalloc。

令人反感的代码行是:

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

我可以在ARC中使用任何等效的代码来使错误消失吗?老实说,我不太了解内存分区。让我知道这是否还不够。

提前致谢

最佳答案

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

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

但是,回到过去,您可以在知道要回收大量相同类型的对象时使用区域,以将分配开销保持在最低水平。或者,您可以通过从特定的固定大小的池中分配对象来限制某些对象占用过多的内存。

关于iphone - 在启用ARC的iOS5应用中替换NSZoneMalloc的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10849251/

10-09 02:21