带有ARC的Objective C中的对象数组

时间:2013-04-18 04:34:51

标签: ios objective-c c nsarray automatic-ref-counting

我正在编写一个我想加快的应用程序。我认为这样做的一种方法是从使用NSArrayNSMutableArray切换到使用直接c风格的指针数组。

我天真地尝试过:

MyObject** objects = (MyObject**) malloc(N/2*sizeof(MyObject*))

这会在使用ARC时报告编译器错误,因为它不知道如何处理**对象; 这可以通过添加桥接指令来修复。

我的问题是如何处理这个内存以及如何混合C和Objective-C对象进行内存管理。

两种解决方案

MyObject* __weak* objects = (MyObject* __weak*) malloc(N/2*sizeof(MyObject*));

MyObject* __strong* objects = (MyObject* __strong*) malloc(N/2*sizeof(MyObject*));

这两个数组之间有什么区别,如何在完成后释放/释放它们。 NSArrays被优化到不会导致加速的程度吗?

1 个答案:

答案 0 :(得分:3)

  

NSArrays是否已经过优化,以至于不会导致速度加快?

你应该在工具中描述你的代码 - 即使你大量使用数组,你也可能会发现你的代码大部分时间花费在NSArray方法之外的地方,比如-objectAtIndex:

更进一步,应该能够告诉我们 NSArray是否已经充分优化,你不需要改进它。如果您希望通过替换NSArray来加速代码,那么您应该已经分析了代码并确定了昂贵的部分。不要只是猜测需要改进的地方;测量它。