私は既に保持している合成しているNSDateインスタンスでUIViewController(Aと呼ぶ)を持っています。他のオブジェクトから保持されている変数を保持していますか?
私は別のUIViewController(Bと呼ぶ)を作成していて、NSDateインスタンスに渡したいと思っています。 Bでは、私はそれを使用するつもりです。このインスタンスも保持して合成する必要がありますか?私はBがAと同じNSDateインスタンスを使用していると仮定し、メモリが不足しているとAのインスタンスがviewDidUnloadで削除される可能性があります。
一方、私がそれを保持して合成すると、私はBの視点がなくなったときにそれを割り当て解除するつもりです。私がAに戻ると、NSDateのインスタンスはなくなります。
ここでは、ベストプラクティスは何ですか?私はちょうどBで新しいNSDateオブジェクトを作成し、渡されたものと同じ日付にする必要がありますか?この新しいインスタンスを保持/合成しますか?
しかし、BのviewDidUnloadでは、NSDateインスタンスがnilに設定されています。まだAがそれを保持しているときはこれは問題ではないですか?またはviewDidUnloadでnilに設定しないでください。 –
'A'と' B'は 'NSDate'インスタンスへの別々のポインタを保持します。 Bの 'viewDidUnload'が呼び出されると、その_pointer_を' NSDate'インスタンスに 'nil'に設定します。インスタンス自体は依然としてメモリ内に存在し、依然として「A」にアクセス可能である。 '** NSDate'へのポインタを最初に解放せずに' nil'に設定すると、** **問題になります。これは、メモリリークを引き起こします。なぜなら、 'NSDate'の保持カウントは正しくデクリメントされないので、決して解放されないからです。 –
'viewDidUnload'で' NSDate'をリリースして 'nil'する必要があるかどうかについては、そうする価値はないと思います。'A'によってまだ保持されているので、' B'の 'viewDidUnload'が呼び出されたときにあなたの' A'インスタンスがまだ存在すれば、メモリから解放されません。したがって、あなたはその方法でそれを解放することによって、本当に何も達成していません。 –