2012-06-01 37 views
2

我试图适应使用NSZoneMalloc一些旧代码。我使用它的项目启用了ARC,不允许NSZoneMalloc。更换使用iOS5的启用应用程序

问题的代码行是:

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

是否有任何等效代码我可以使用ARC,使错误消失?我并不真正了解内存分区。让我知道这是不是足够的信息。

在此先感谢

回答

5

一般来说,内存分区在现代没有那么重要。虽然它在某些地方仍在使用,你可以放心地采用了直板malloc()替换此。

区域在历史上用于多个分配池来限制内存使用情况,并提高再利用性和局部性。他们已经基本上在虚拟内存的现代世界变得无关(即使在平台上,如不具有交换的iOS)。

然而,早在一天,你可以当你知道你将要再造一个不少同类型的对象,保持分配开销至少使用一个区。或者,您可以通过从特定的固定大小的池中分配它们来限制某些对象消耗太多内存。

+0

X = malloc的(的sizeof(* X));诀窍,非常感谢! – Timbo