iPhone Objective-C无法使用'new'来分配?

时间:2010-07-10 23:58:40

标签: iphone arrays grid

我正在为iPhone创建一个生命游戏计划,我希望能够以大阵列存储游戏的先前状态,如果我采用C方法并且每个“网格”是由两个组成的结构对于X,Y和BOOL 数组的整数,其中我将内存与X 成比例,与BOOL值的大小相比,我可以创建1000个这样的'网格',分辨率为1024x768,大约为.014秒,但当我创建一个复制此结构的Objective-C类型时,它需要.037秒。所以,既然我想尽可能地加快速度,但仍然尽可能地坚持Obj-C使代码可以忍受我问有没有办法更快地分配数据,我尝试了新的但我似乎无法看看为什么Obj-C不支持它!

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

'new'是C ++,而不是客观C.您可以将.m文件重命名为.mm,以便在Objective-C ++模式下编译以支持'new',但是如果malloc()对你不够快,那么我怀疑新的会对你有所帮助。

答案 1 :(得分:2)

神圣的问题,蝙蝠侠,下次尝试使用一些标点符号和空格!

首先,你所说的这个new是C ++主义。您无法通过new运算符创建Objective-C实例。阅读this wonderful doc以更深入地了解Objective-C。

现在,试图解析你的问题,听起来像是这样:

  • 您尝试拨打BOOL * 1,000次来创建1,000 malloc()个?

  • ...您已经得出结论,分配1,000个对象的速度相对较慢是一个问题吗?

这里有一个更基本的架构问题。也就是说,无论是BOOL *还是malloc() s,您都试图使用单独的分配建模到这样一个细粒度的级别,而Objective-C对象则是其他任何东西。

myBools = malloc(sizeof(BOOL) * 10 * 10)返回的最小大小分配通常为16个字节。那个一位BOOL(实际上,它是一个8位类型;没有单个位分配)将占用比它应该多16倍的内存。

最好将Grid建模为包含所有数据的Grid类的单个实例。如果您需要一个10x10网格,每个点都有一个标记,只需myBools[col + (row * 10)]。然后,可以通过{{1}}检索任何BOOL - 也就是说,将一个2D(或3D)网格网格映射到一个线性数组中是微不足道的。

答案 2 :(得分:0)

我认为你不应该调用malloc()1000次,而是调用一次,然后将指针设置到内存块中。那应该更快。我不认为考虑新的或malloc是否更快是正确的方法,改变算法通常有效10倍。