从2D NSArray创建C数组

时间:2011-06-15 00:05:19

标签: objective-c ios blas acc

我有一个字符串编号的2D NSArray,我想将其转换为2D C数组,用于BLAS / LAPACK函数(通过加速框架)。 这行代码似乎有效,但似乎非常低效,并且最终因malloc错误而崩溃。有没有更有效的方法将这个2D NSArray转换为C数组?或者使用NSArrays和BLAS / LAPACK的方式?

double gridDataC[[nrows intValue]+1][[ncol intValue]+1];

for(i=6;i<[fileLines count]-1;i++){
    for(j=0;j<[ncol intValue]-1;j++){
        gridDataC[i][j]=[[[[fileLines objectAtIndex:i] componentsSeparatedByString:@" "] objectAtIndex:j] doubleValue];
    }  
} 

fileLines是一个数组,其中包含解析为相应数字的文件行。

1 个答案:

答案 0 :(得分:0)

这里有一些处理记忆的事情。

1. componentsSeparatedByString:创建一个自动释放的数组。由于您为该字符串中的每个对象进行循环,因此您将多次创建类似的数组。由于自动释放的对象直到runloop结束才释放,这可能会阻塞内存。最好通过将方法调用移出内循环来执行此操作。

2. i的价值最令人困惑。您将i作为gridDataC的索引传递。如果您从i - 6开始,那么它应该是i = 6

double gridDataC[[nrows intValue] + 1][[ncol intValue] + 1];

for( i = 6; i < [fileLines count] - 1; i++ ){
    NSArray * components = [[fileLines objectAtIndex:i] componentsSeparatedByString:@" "];
    for( j = 0; j < [ncol intValue] - 1; j++ ){
        gridDataC[i - 6][j] = [[components objectAtIndex:j] doubleValue];
    }  
} 
相关问题