C# 是否应始终使用NSArray和NSMutableArray而不是普通的C数组?
我有一段C语言的代码,我正在用Objective C重写它。 代码使用的数组非常类似于double[],还使用点结构数组。 那么,我应该简单地使用C样式的数组来存储任务的Objective C double和CGPoint,还是每次都使用NSArray或NSMutableArray以及NSValue或NSNumber来存储其中的非对象是一种好的做法 我可以很好地使用普通数组,但是这个数组是根据大小在运行时生成的,所以我应该使用malloc和free来完成同样的任务吗 注: 这是C代码,我正试图用Objective C实现,如果有人有转换后的代码,请帮助我。C# 是否应始终使用NSArray和NSMutableArray而不是普通的C数组?,c#,objective-c,C#,Objective C,我有一段C语言的代码,我正在用Objective C重写它。 代码使用的数组非常类似于double[],还使用点结构数组。 那么,我应该简单地使用C样式的数组来存储任务的Objective C double和CGPoint,还是每次都使用NSArray或NSMutableArray以及NSValue或NSNumber来存储其中的非对象是一种好的做法 我可以很好地使用普通数组,但是这个数组是根据大小在运行时生成的,所以我应该使用malloc和free来完成同样的任务吗 注: 这是C代码,我正试图用
我试过了,但似乎对我不起作用 虽然使用NS对象通常更好,但当您拥有“非对象”集合时,您需要在使用malloc/free自己管理内存或将非对象数据强制转换为可存储对象之间进行权衡。请记住,NSArray等仅存储NSObject。对于double,您可以使用NSNumber作为容器。对于CGPoint和其他结构,您可以创建一个新的对象类型或以某种方式强制转换为NSData对象。您正在从C#转换,在该语言中,您可以同时拥有未装箱的基本类型和结构的数组,例如,
double
,以及装箱类型的数组,例如,相当于Obj-C中包含双代号的对象
未装箱的double
s的C#数组(对其他基本类型和结构也适用)介于Obj-Cdouble[]
和NSNumber
的NSArray
之间-在C#中,元素是未装箱的(如double[]
),而数组本身是一个托管对象(如NSArray
)
C#装箱数组相当于NSObject
s的NSArray
s
你怎么选择
- 如果C#代码具有固定大小的非固定类型数组,请使用(Obj-)C数组
- 如果C#代码作为装箱类型的可变大小数组使用Obj-C
sNSArray
<> >如果您对C++的满意,对于大小可变的未装箱类型数组,请考虑<代码>向量< /> > 。
- 对于其他所有内容,平衡装箱每个元素的成本(10000个NSNumbers与相同数量的doubles相比,开销较高)与管理阵列的内存(
/malloc
与free
/alloc
与ARC/GC)。一般来说,但不是绝对规则,未装箱类型的数组最好与C数组一样,而装箱类型的数组最好与release
s一样NSArray