在连续的内存块中分配objective-c对象

Jac*_*cob 1 memory-management objective-c ios

我想从某个objective-c类中分配x个对象,使它们在内存中连续布局.该平台是iOS.

我想解决的实际问题是如何将这些x对象存储在内存中,这样我就可以尽可能少地缓存它们来迭代它们.我正在考虑创建一个简单的c样式的objective-c对象数组,但是当我分配这样一个对象Obj *obj = [[object alloc] init];并将其分配给我的数组中的索引时,我只是存储指针,所以这显然不起作用.

我怎么能做到这一点?

编辑:更多背景:我正在尝试将面向数据的设计应用到我的iOS游戏引擎中,我相信以这种方式在内存中布置对象会让我轻松获得性能(我错了吗?),因为我当前的引擎会需要最少的调整.

Ole*_*ann 5

如果你真的想这样做(除非你确定你面临瓶颈,否则不要进行优化),你必须覆盖+allocWithZone:你班级的方法.我建议你阅读Mike Ash最近发表的关于Objective-C中的Custom Object Allocators的文章.引用它:

Objective-C对象只是一块具有正确大小的内存块,并且第一个指针大小的块设置为指向对象的类.因此,自定义分配器需要返回指向适当大小的内存块的指针,并适当地填充类.

因此,您可以首先分配大量内存(使用calloc()),然后您的allocWithZone:方法可以在这个大块内存中保留一个位于正确位置的空间.