2

私は自分自身を説明しようとします.私はオブジェクトPersonと.を持つシングルトンオブジェクトPeopleManagerを持っていNSDictionary *_peopleます. as キー を持つオブジェクトを
_people保持するディクショナリです。PersonpersonId

self人が作成されたら、それを_people辞書に追加します(Person initメソッド内)

people ディクショナリは、person が dealloc されるまで person オブジェクトを保持する必要がありますが、問題は、コードのどこかに person を割り当ててから解放すると、PeopleManagerまだ _people ディクショナリに保持されているため、dealloc を取得できないことです。

本当に問題は、_people辞書が人を保持することです。割り当て辞書を持つことができれば素晴らしいことですが、それが不可能であることはわかっています。

これを解決するにはどうすればよいですか?

4

2 に答える 2

3

辞書はそれを使用しているので人を保持しなければなりません。これが起こらなかった場合、辞書はそのオブジェクトが常に生きていることを保証できませんでした。

Personを解放して、それがまったく必要なくなり、割り当てが解除されることを期待する場合は、を介して辞書から削除し[NSMutableDictionary -removeObjectForKey:]ます(したがって、保持カウントを減らします)。ただし、NSDictionaryからオブジェクトを削除することはできないため、これにはNSMutableDictionaryを使用する必要があります。

于 2012-05-27T14:15:46.817 に答える
1

NSDictionaryの変更可能な対応物を使用する場合、使用されなくなったオブジェクトを簡単な方法で削除できます。-removeObjectForKey:

于 2012-05-27T14:17:36.313 に答える