NSArray的,原始类型和拳击哦我的!

时间:2009-11-13 04:15:40

标签: c# objective-c

我对Objective-C世界很陌生,我在.net / C#方面有着悠久的历史,所以我很自然地倾向于使用我的C#智慧。

现在问题是:我真的倾向于创建某种类型的简单 Objective-C集合来保存原始类型,因为我不喜欢将原始类型包装到对象中的整个概念(即NSNumber),然后将其添加到NSArray等集合中。

问题是,我完全理解NSArray只对对象进行操作。然而,对于我来说,我只是因为没有集合可用于处理原始整数,所以我们不得不使用盒装基元。

所以C#伙伴们会在过去的.net中知道我在说什么。通常,当泛型不存在时,您要么使用简单数组,要么使用ArrayList。 ArrayList基本上强迫你打包原始类型,但它实际上是在幕后完成的,你付出了相当大的代价(就性能而言)。

如果你无法处理性能成本,那么你就会推出自己的自定义集合,或者在它们出来时最终使用泛型。

现在在Objective-C界面,我们不得不再次处理这个问题,但它就像Apple开发人员并不真正关心,或者它只是不是什么大不了或者是什么。

所以我的问题是:这里的推荐做法是什么?我是否应该尝试构建自己的自定义Objective-C集合来保存NSInteger?或者我应该只使用原生C数组作为同伴编码器Memo在这篇博文中建议:NSArray vs. C Array performance

或者我只是坚持使用Apple的内置系列并咬紧牙关。它表明,在构建性能关键应用程序时,Memo解释的性能特征值得考虑。

这篇文章很满口,但我不得不把它放在胸前。

4 个答案:

答案 0 :(得分:2)

我个人建议使用目标C ++和std :: vector<&gt ;;除非您确实需要使用本机目标C容器,否则会导致您无法使用对象。

答案 1 :(得分:0)

如果你只想持有NSIntegers,你可以只使用常规的C数组吗?

编辑:如果你出于性能原因而这样做,那对我来说听起来就像是一个过早的优化。

答案 2 :(得分:0)

我从来没有真正需要一个动态的整数数组,因为我总是有一个更好的解决方案来解决我正在尝试解决的问题。例如,NSData可以存储一个字节数组,或者如果它是一组你想要的整数,你可以使用NSIndexSet。

你也可以使用CFArrayCreate并传入适当的回调函数(如果你愿意,可以将它包装在Objective-C中)。

你有一个特定的问题,你正试图解决?

答案 3 :(得分:0)

通过malloc进入'C'数组方式需要考虑数组所有者的生命周期才能释放它。其他考虑例如ARC和调整阵列等的大小使得“包装”方法具有吸引力。我看到“C风格”的唯一原因是项目是端口还是基于探查器结果。如果您决定“换行”,请考虑像NSArray+Primitive那样创建一个类别来向NSArray和NSMutableArray添加基本类型功能的方法。