1

Xcode でディクショナリ オブジェクトの配列を含む配列を作成しようとしています。1 つ以上の辞書を含む作業配列を作成し、addObject: メソッドを使用して、この配列をオブジェクトとしてメイン配列に追加できます。これを数回繰り返して、作業配列を再構築し、オブジェクトをメイン配列に追加します。私のメイン配列を調べると、作業配列が構築された最後の辞書の複製が含まれていることを除いて、これまでのところすべて問題ありません。これは、addObject を使用すると、配列にポインターが割り当てられるだけで、保持カウントが増加したり、作業配列のコピーが作成されたりしないため、再構築されるたびに、メイン配列が単純にこの配列を指しているためであると想定しています。 .

私の質問は、作業配列のコピーを作成してメイン配列に追加し、それを再構築して再度追加する方法だと思いますか? これが基本的な質問であると思われる場合は、それが理にかなっており、申し訳ありません.


        [sectionArray release];
        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

これはすべて機能します。これは素晴らしいことです。私がまだ頭を抱えていないことの1つは、メイン配列を使い終えて[mainArrayリリース]も行うと、これらの子配列がメモリに残されるか、リリースが破棄される危険性があるということです彼らも?


すべてのオブジェクトを削除するのではなく、内部の作業配列を再初期化することで解決しました。つまり、

私は持っていました:

        [sectionArray removeAllObjects];
        [sectionArray addObject:dict];

そしてそれを次のように変更しました:

        sectionArray  = [[NSMutableArray alloc] init];
        [sectionArray addObject:dict];

これは良いことではないと感じていますが、あちこちでメモリリークが発生し始めます。

4

1 に答える 1

1

別の配列に配置するだけの場合sectionArrayは、配置した後に解放して、参照mainArrayのみmainArrayを保持するようにする必要があります。

sectionArray = [[NSMutableArray alloc] init];
[sectionArray addObject:dict];
[mainArray addObject:sectionArray];
[sectionArray release];

後でmainArray参照を解放すると、すべての子が解放され、参照sectionArrayが解放されます。(同じことが、入れられたdictにも当てはまりますsectionArray)。

これがお役に立てば幸いです。

于 2009-11-19T19:31:41.563 に答える