【发布时间】:2013-04-18 04:34:50
【问题描述】:
我正在编写一个我想加快速度的应用程序。我想到的一种方法是从使用 NSArray 和 NSMutableArray 切换到使用直接 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 是否已优化到不会大幅提升速度的程度?
【问题讨论】:
-
CFArray 进行了高度优化(低至 ASM 级别)。您需要放宽视野,并尽量不要像这样进行微优化,因为现在您已经创建了内存头痛和指针安全问题,其中存在(次要)速度问题。
-
个人资料。不要猜测。学习如何使用仪器。查看 Apple's developer videos 获取入门帮助。
-
CodaFi:CFArray 现在实际上比 NSArray 慢一些,而且肯定没有优化“到 asm 级别”。虽然它非常快,所以如果没有可靠的分析数据,我不会责怪它。
-
@Catfish_Man 然后 CLANG 做得非常好,将它降到了那个水平。
-
事实证明,极端的简单性加上一些技巧可以得到非常好的代码生成,而不必费尽心思:)
标签: ios objective-c c nsarray automatic-ref-counting