我正在实现一个二维数组并关心实现细节的效率,二维数组接口应该提供两个基本方法:
(假设数组是固定大小,创建时指定,所以没有动态大小变化)
getObjectAtRow:列:
setObjectAtRow:列:
enumerateUsingBlock:^(id obj, NSUInteger 行, NSUInteger 列, BOOL *stop)
执行:
数组数组 (NSMutableArray)
拥有一个大小为 NSMutableArrayrowCount
且其中的每个元素都是大小为 NSMutableArray 的 NSMutableArray columnCount
,然后 getter 将获取行数组,然后从行数组中获取指定列的对象,setter 将使用相同的技术。Enumerator 使用两个枚举块,一个用于遍历行数组,对于每个行数组,另一个枚举器用于所有对象。
线性阵列 (NSMutableArray)
只有一个 NSMutableArray 的实际对象,getter 和 setter 将使用以下方法计算索引:
索引 = 行 * 列数 + 列;
枚举器遍历线性数组,并通过以下方式计算行和列:
行 = 索引 / 列计数 列 = 索引 % 列计数
C 数组(假设元素是结构而不是类对象并且大小是预定义的)
所以我有:
MyStruct elements[ROW_COUNT][COLUMN_COUNT]
然后以通常的 C 方式使用它,getter/setter 只是获取/设置:
elements[row][column]
枚举只是使用两个 for 循环
我的担忧:
哪个更有效率?我觉得 C 数组听起来更高效,但内存管理是否有点困难,尤其是在使用 ARC 时?
哪一个更好?线性阵列或阵列阵列?也就是说,进行生产/除法以获取/设置线性数组中的对象是否更快,还是使用数组数组更快?
谢谢