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