如何在Objective-C中动态分配指向对象的指针数组?
Posted
技术标签:
【中文标题】如何在Objective-C中动态分配指向对象的指针数组?【英文标题】:How to dynamically allocate array of pointers to objects in Objective-C? 【发布时间】:2010-02-22 03:58:17 【问题描述】:我正在尝试提高我的应用程序的性能,我想从我当前使用的 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
我收到以下错误: 分配中的不兼容类型
那我做错了什么?
是否可以像这样使用动态分配的对象数组?
另外,在我的 dealloc 方法中,我设置为在每个对象上调用 release 然后 free(myObjectArray)
【问题讨论】:
【参考方案1】:你需要更多*
s。将数组指针声明为:
MyObject **myObjectArray;
然后像这样初始化它:
myObjectArray = (MyObject**) malloc(numberOfObjects * sizeof(MyObject *));
让您的代码中的其他所有内容与现在相同,您应该会很好!为什么要从NSMutableArray
更改?就灵活性和 Cocoa 支持而言,它比您的 C 数组更有能力。
【讨论】:
@Big Dogg,如果您有性能问题,我可以保证NSMutableArray
不是原因...
没有性能问题(还)。我很好奇使用标准 C 数组与 NSMutableArray 的性能增益。每帧访问大约一百个对象,我认为会有某种性能改进。但是,您是正确的,如果出现延迟,它很可能在其他地方。
如果你真的关心性能,我建议避免过早的优化,而是使用 Instruments 和 Shark 来分析你的代码。您可能会对应用程序中的实际瓶颈感到惊讶。【参考方案2】:
您确定会大大提高性能吗? NSMutableArray 已经存在了很长时间,并且在为新元素分配更多内存方面可能比您更智能。
现在,如果您正在创建一个链接列表或其他东西,这可能会为中间插入之类的东西带来好处......但对于一个可以添加的普通数组,我不确定您有多少收益会看到的。
【讨论】:
这不是关于内存的分配,而是更多关于迭代每个元素的处理时间。当必须每秒访问许多对象 60 次时,我认为标准 C 数组会比使用 NSMutableArray 更快。但是,我可能是错的......以上是关于如何在Objective-C中动态分配指向对象的指针数组?的主要内容,如果未能解决你的问题,请参考以下文章