0

大学のプロジェクトのために、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「合計」は決して割り当て解除されません。何万回も実行されるループで呼び出されると (RK4 を使用した二重振り子のモデリング)、メモリ使用量が増加し、プログラムが非常に遅くなります。

NSMutableArrayこのメソッドが返された後、これが割り当て解除されない理由はありますか?

4

2 に答える 2