2011-07-17 13 views
0

これまでのところ、これに対する答えを見つけ、それを修正するために精神的注意を払っていましたが、今は私の人生のために再び投稿を見つけることができません。NSDictionaryのメモリ管理

非常に簡単 - 辞書に辞書を追加する私の現在の方法は漏れています。彼らが適切にリリースされていることを確認する最善の方法は何ですか?私の方法:

[beachPresenters addObject:[[NSMutableDictionary alloc]initWithObjectsAndKeys: 
           @"Kayak rides",@"name",@"kayak_sm.png",@"smPhoto",@"kayak_med",@"medPhoto",@"Free kayak rides for kids",@"description",@"",@"Friday", 
           @"All day! 10.00am - 6.00pm",@"Saturday",@"",@"Sun",@"Beach",@"stage",@"Blah blah blah",@"blurb",nil]]; 
+1

[メモリ管理規則]の固体理解は(http://tinyurl.com/42kbr33)あなたを助けているだろうこれに自分自身で答える。基本的に、あなたはそれを解放せずに何かを割り当てています。 – Caleb

+0

Calebに感謝します。はい、私はメモリ管理の問題をしっかりと理解していれば、私自身の質問に答えることができると確信しています。これは私の妻がなぜ私が自分自身と話しているのか疑問に思うかもしれませんが、それは別の問題です。 –

+0

皆様、お手数をおかけしていただきありがとうございます。 –

答えて

1

beachPresenters(私はそれが配列だと仮定)の辞書の所有権を取得し、その辞書の+alloc/-initによって引き起こさ参照カウントに+1のバランスがとれていません。これにより、辞書が漏洩する。

保持バランスを取るために便利なメソッドの相当品を使用してください:

NSDictionary *presenter = [NSDictionary dictionaryWithObjectsAndKeys: ...]; 
[beachPresenters addObject: presenter]; 
1

あなたの配列beachPresentersは、作成した可変配列を保持しますが、あなたの例で作成したとして、あなたの配列は、すでに1の保持カウントを持っています。だから、たとえあなたがbeachPresentersを処分したとしても、あなたの辞書は引き続き保持されます。

[NSMutableDictionary dictionaryWithObjectsAndKeys:]を代わりに使用してください。

0

あなたは以下のような実装を持つことができます。

NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithObjectsAndKeys: 
          @"Kayak rides",@"name",@"kayak_sm.png",@"smPhoto",@"kayak_med",@"medPhoto",@"Free kayak rides for kids",@"description",@"",@"Friday", 
          @"All day! 10.00am - 6.00pm",@"Saturday",@"",@"Sun",@"Beach",@"stage",@"Blah blah blah",@"blurb",nil]; 

[beachPresenters addObject:dict]; 
[dict release]; 

または

NSMutableDictionary *dict = [[[NSMutableDictionary alloc]initWithObjectsAndKeys: 
          @"Kayak rides",@"name",@"kayak_sm.png",@"smPhoto",@"kayak_med",@"medPhoto",@"Free kayak rides for kids",@"description",@"",@"Friday", 
          @"All day! 10.00am - 6.00pm",@"Saturday",@"",@"Sun",@"Beach",@"stage",@"Blah blah blah",@"blurb",nil] autorelease];