【发布时间】:2013-10-30 13:31:06
【问题描述】:
我正在尝试用 Objective-C 为一个大学项目编写一个命令行应用程序。该项目需要矩阵操作,因此我编写了一个类来处理所有矩阵方法(加法和乘法等)。我的矩阵方法如下所示:
- (NSArray *)sumMatrices:(NSArray *)matrices
{
NSMutableArray *sum = [[NSMutableArray alloc] init];
NSInteger cols = [matrices[0][0] count];
NSInteger rows = [matrices[0] count];
for (int i = 0; i < rows; i++) {
NSMutableArray *row = [[NSMutableArray alloc] init];
for (int j = 0; j < cols; j++) {
CGFloat value = 0.0;
for (NSArray *array in matrices) {
value += [array[i][j] doubleValue];
}
[row addObject:[NSNumber numberWithDouble:value]];
}
[sum addObject:[row copy]];
row = nil;
}
return [sum copy];
}
但是这个程序存在一个大问题,我在 iOS 上使用了 Objective-c,希望 ARC 能够毫无问题地处理我所有的内存分配和释放,但是在这种情况下,NSMutableArray 'sum' 永远不会被释放,并且因为这个方法是在一个循环中调用的,该循环运行了数千次(使用 RK4 对双摆进行建模),内存使用量会增加并使程序变得非常慢。
这个方法返回后,这个NSMutableArray 没有被释放,有什么原因吗?
【问题讨论】:
-
你已经写了 for 循环所以它执行多少次时间值将添加到你的数组中
-
您认为哪个数组没有被释放?原版
sum还是您要退回的副本?是什么保留了返回值? -
这看起来是一种非常低效的方式来做你想做的事。处理
NSNumber对象很痛苦,所以我想说使用malloc()d 二维数组floats。它会方式更快。
标签: objective-c matrix automatic-ref-counting