0

NSArray を NSString に変換する際に問題があります。

これがコードです。

- (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)are_2
{
     NSString *outputString = @"Start";

     if (arr_1) {
         for (Object *object in arr_1) {
             outputString = [outputString stringByAppendingFormat:@"\n(%f, %f)", object.value1, object.value2];
         }
         outputString = [outputString stringByAppendingFormat:@"\nArray 1 End"];
     }
     if (arr_2) {
         for (Object *object in arr_2) {
             outputString = [outputString stringByAppendingFormat:@"\n(%f, %f)", object.value1, object.value2];
         }
         outputString = [outputString stringByAppendingFormat:@"\nArray 2 End"];
     }

     NSLog(@"%@", outputString);
}

各 are_1 と are_2 には 48 個のオブジェクトと 1568 個のオブジェクトがあります。

iPhone Simulator では問題が見つかりませんが、iPad mini と iPhone5 デバイスではアプリケーションがログなしでクラッシュします。2 番目のループ関数で発生します。

メモリの問題があるに違いないと思いますが、何が間違っているのか正確にはわかりません。

これについて助けてください。

4

4 に答える 4

1

NSMutableStringの代わりに使用する必要がありNSStringます。文字列は変更可能である必要があります

 - (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)arr_2
    {
        NSMutableString *outputString = [[NSMutableString alloc] initWithString:@"Start"];

        if (arr_1) {
            for (Object *object in arr_1) {

               [outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
            }
            [outputString  appendString:@"\nArray 1 End"];
        }
        if (arr_2) {
            for (Object *object in arr_2) {
                [outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
            }
            [outputString appendString:@"\nArray 2 End"];
        }

        NSLog(@"%@", outputString);
    }
于 2013-06-05T09:16:34.863 に答える
0

配列に多くのアイテムがある場合、多くのメモリを消費している可能性があります。あなたが持っているたびに:

outputString = [outputString stringByAppendingFormat:@"..."];

新しい文字列を何度も作成していますが、古い文字列が使用していたメモリはまだ使用中です。このメモリを所有していないため、このメモリを手動で解放することはできません。次に自動解放プールが排出されたときに解放されますが、メソッドのどこにもプールが排出されないため、メモリが不足するリスクがあります。

これは、代わりに変更可能な文字列を使用するだけで修正できます。

- (void)createStringWithArray:(NSArray *)arr_1 andTheOtherArray:(NSArray *)are_2
{
     NSString *outputString = [NSMutableString stringWithString:@"Start"];

     if (arr_1) {
         for (Object *object in arr_1)
             [outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
         [outputString appendString:@"\nArray 1 End"];
     }

     if (arr_2) {
         for (Object *object in arr_2)
             [outputString appendFormat:@"\n(%f, %f)", object.value1, object.value2];
         [outputString appendString:@"\nArray 2 End"];
     }

     NSLog(@"%@", outputString);
}
于 2013-06-05T12:52:16.073 に答える
0

両方の配列を単一の変数に割り当てていますoutputSting。それを別の変数にして、それらを連結します。また、メソッド内でパラメーターを渡すことにも注意してください。

于 2013-06-05T08:20:54.063 に答える