Iphone 如何在Objective-C中动态分配指向对象的指针数组?

Iphone 如何在Objective-C中动态分配指向对象的指针数组?,iphone,objective-c,Iphone,Objective C,我正在努力提高我的应用程序的性能,我希望将当前使用的NSMutableArray更改为动态分配的C数组 作为测试,我创建了以下类: 在我的类界面中,我有: MyObject *myObjectArray; 在我的实现中,在初始化对象之后,我有另一种方法来设置数组: -(void) createObjectsWithNumberOfObjects:(int)numberOfObjects { MyObject *tempObject = nil; myObjectArray =

我正在努力提高我的应用程序的性能,我希望将当前使用的NSMutableArray更改为动态分配的C数组

作为测试,我创建了以下类:

在我的类界面中,我有:

MyObject *myObjectArray;
在我的实现中,在初始化对象之后,我有另一种方法来设置数组:

-(void) createObjectsWithNumberOfObjects:(int)numberOfObjects
{
    MyObject *tempObject = nil;
    myObjectArray = (MyObject*) malloc(numberOfObjects * sizeof(tempObject));
    for( int i = 0; i < numberOfObjects; i++ )
        tempObject = [[MyObject alloc] init];
        myObjectArray[i] = (MyObject*) tempObject; // error
    }
}
-(void)createObjectsWithNumberOfObjects:(int)numberOfObjects
{
MyObject*tempObject=nil;
MyObject数组=(MyObject*)malloc(numberOfObjects*sizeof(tempObject));
for(int i=0;i
我得到一个错误: 赋值中的不兼容类型

那么我做错了什么

这样使用动态分配的对象数组可能吗


另外,在我的dealloc方法中,我将其设置为在每个对象上调用release,然后释放(myObjectArray)

您需要更多的
*
s。将数组指针声明为:

MyObject **myObjectArray;
然后像这样初始化它:

myObjectArray = (MyObject**) malloc(numberOfObjects * sizeof(MyObject *));

让代码中的其他内容保持与现在相同的状态,您应该会做得很好!为什么要从
NSMutableArray
更改?它在灵活性和Cocoa支持方面比您的C阵列要强大得多。

您真的确定您将大大提高性能吗?NSMutableArray已经存在很长时间了,在为新元素分配更多内存方面,它可能比您现在更智能


现在,如果你正在创建一个链表或一些东西,这可能会给中间插入的东西带来好处。但是,对于一个可以添加到的普通阵列,我不确定您将看到多少收益。

@Big Dogg,如果您有性能问题,我可以保证
NSMutableArray
不是原因……没有性能问题(目前)。我对使用标准C阵列与NSMutableArray相比的性能增益感到好奇。由于每帧访问大约100个对象,我认为性能会有所提高。但是,如果出现延迟,它可能会出现在其他地方,这是正确的。如果您真的关心性能,我建议避免过早优化,而是使用工具和Shark分析代码。您可能会对应用程序中的瓶颈感到惊讶,它不是关于内存分配,而是关于迭代每个元素的处理时间。当必须每秒访问60次多个对象时,我认为标准C数组比使用NSMutableArray更快。然而,我可能错了。。。