2011-10-28 28 views
1

私はNSMutableDictionary(currentUpdate)を新しいデータで毎秒追加するNSMutableArray(tripHistory)を持っています。辞書の配列、空の辞書、配列データを保持

しかし
[currentUpdate setObject:testVariable forKey:@"Test"]; 
[tripHistory addObject:currentUpdate]; 
[currentUpdate removeAllObjects]; 

[[tripHistory objectAtIndex:i] description]すべてを呼び出すtripHistoryてIループはnullです。次のように

私のループは次のとおりです。

for (int i=0; i<[tripHistory count]; i++) 
{ 
    NSLog(@"%@", [[tripHistory objectAtIndex:i] description]); 
} 

が私の変数を初期化するには、次のコードは、最初の更新のために呼ばれています。

tripHistory = [[NSMutableArray alloc] init]; 
currentUpdate = [[NSMutableDictionary alloc] init]; 

答えて

4

NSArrayにオブジェクトを追加しても、そのコピーは作成されません。起こるのは、その参照カウントがインクリメントされることだけです。したがってcurrentUpdateとNSDictionaryはtripHistoryに追加されています。 currentUpdateからオブジェクトを削除すると、NSDictionaryのオブジェクトもtripHistoryに削除されます。

tripHistoryにcurrentUpdateを追加した後に、currentUpdateを解放し、次回のアップデートのために新しい空のNSDictionaryで再起動するだけです。

+0

どのようにARCを有効にして強制的に解除できますか? – Baub

+0

私はちょうどcurrentUpdate = [[NSMutableDictionary alloc] init];それが更新されるたびに。 – Baub

+1

あなたはしません。次回の更新を開始するときに新しい辞書をそれに再割り当てするだけです: 'currentUpdate = [NSMutableDictionary alloc] init;;' –

3

オブジェクトを削除しないでください。辞書と配列は同じオブジェクトへの参照を保持しています。配列に別のdictを追加したい場合は、最初のdictを解放して新しいものを作成します。

2

辞書の内容をすべて削除しています。ディクショナリを配列に追加してもコピーは作成されません。ディクショナリへの参照が保持されます。ディクショナリへの参照は、何かを追加するたびに空になります。

ループのたびに新しい辞書を割り当てて、その辞書をその配列に追加する必要があります。ガベージコレクションやARCを使用していない場合は、アレイに追加された辞書をリリースする必要があります。

+0

これはうまくいっていて、私のARCの懸念にも対処しました。驚くばかり。ありがとうございました! – Baub

関連する問題