我正在尝试修改一些使用NSZoneMalloc的旧代码。我正在使用它的项目启用了ARC,不允许使用NSZoneMalloc。
令人讨厌的代码行是:
x = NSZoneMalloc([self zone], sizeof(*x));
是否有任何与ARC相同的代码可以使错误消失?说实话,我真的不明白记忆区划。如果这还不够,请告诉我。
提前致谢
答案 0 :(得分:5)
一般来说,记忆区划在现代时代并不重要。虽然它仍然在某些地方使用,但您可以使用直线malloc()
安全地替换它。
区域历来用于多个分配池,以限制内存使用并增加重用和位置。它们在虚拟内存的现代世界中基本上变得无关紧要(甚至在没有交换的iOS平台上)。
然而,在当天,当您知道要回收大量相同类型的对象时,可以使用区域,以便将分配开销保持在最低限度。或者,您可以通过从特定的固定大小的池中分配来限制某些对象占用过多内存。