2011-08-12 13 views
2

オブジェクトを整数にマップするNSDictionaryを作成しています.NSDictionariesはオブジェクト以外のものを処理しないため、NSNumberオブジェクトの各整数を[NSNumber numberWithInt:30]で囲むか、何を持っているかがわかります。私が明らかにしていないのは、私が作成しているNSNumberオブジェクトをすべて解放する必要があるかどうかです。私は実際にそれらのためのスペースをalloc'ingていないので、彼らはautoreleaseプールにする必要がありますが、私はNSDictionaryオブジェクトが保持し、それらを適切に解放することを確認することができますか?のは、私が自分自身でNSDictionaryに追加されたNSNumbersをリリースする必要がありますか?

NSDictionary * myDict = [[NSDictionary alloc] initWithObjectsAndKeys: objectOne, [NSNumber numberWithInt: 30], nil]; 

の設定だし、(私は私自身のコード内でそのためのスペースをalloc'ingおりますので)私はそれで終わりだとき、私はきちんとNSDictionaryのを解放していましょう。

答えて

2

なしNSNumberオブジェクトは自動リリースされます。

これらをNSDictionaryに追加すると、追加する各NSNumberオブジェクトに保持メッセージが送信されます。

メモリ管理ルールによれば、これらのオブジェクトは所有していません。つまり、NSDictionaryは何とかしています。したがって、NSDictionaryオブジェクトはそれを解放する責任がありません。

あなたはalloc & initWithObjectsAndKeys:で作成されたNSDictionaryを所有しています。したがって、myDictオブジェクトのメモリ管理には注意が必要です。

+1

numberWithIntは簡易メソッドです(つまり、クラスで呼び出されています)。したがって、メモリ管理規則に従って、initXXXというメソッドを呼び出さなかったので、オブジェクトは自動解放されて返されます。 – Oli

+0

が正しい。しかし、手動でリリースする必要があるかどうか、または自動解放メカニズムを使用する必要があるかどうかを確認する必要があります。後者はこのケースに当てはまります – Wizz

1

いいえ、うまくいきます。

オートレリースされたNSNumberを辞書に追加します。辞書はNSNumberを保持するので、最終的にオートリースすると有効になります。

しかし、ちょっとした点で、不注意なことはありません。あなたは、NSNumberがキーであり、objectOneが辞書に格納されている値であることを認識していますか? NSNumberはキーとして使用されるオブジェクトの要件であるNSCopyingプロトコルに準拠しているため、これは問題ありません。

+0

ああ、そうです、NSDictionaryはそのように初期化された方法で値のキー値Key-Value-Key-Value。それは私の目的には関係ありませんが。私はまだ正確に*どのように*私はNSDictionaryが入る自動リリースされたオブジェクトを保持することを知っている明確ではない。これはオブジェクトが行うように設計されているだけのことです - つまり、別のオブジェクトを含む可能性のあるオブジェクトのドキュメントをチェックする必要がありますか?それとも、私が何をすべきかを伝えるために使うことができる他の一般化はありますか? – Tneuktippa

+2

すべてのコレクションはオブジェクトを保持します。あなたがそれをやる方法を考えてみてください。プロパティと同様に考える - プロパティを持つカスタムクラスを作成し、これらのプロパティをオブジェクトに設定し、クラスがプロパティを保持します。これはiOS全体に表示されます。モーダルビューコントローラを表示すると、アプリケーションのメインウィンドウにはビューコントローラが保持され、ビューにはサブビューが保持されますが、それらも保持されます。基本的に; iOSは、コレクション内のオブジェクトでも、View Controllerでも、保持する必要があるものはすべて保持します。 – Abizern

+0

私が言っていることは、「あなたはそれに慣れるだろう」 – Abizern

関連する問題