0

以下に示す Google マップ アプリケーション ( source )によく似た、周辺機器のスライド イン/スライド アウトの右側のビュー コントローラーを使用するマッピング アプリケーションがあります。

ここに画像の説明を入力

私のアプリでは、このスライド アウト ビューにweak delegateプロパティがあり、マップ ビュー コントローラーをデリゲートに設定します (例: mapOptionsViewController.delegate = selfinside からmyMapViewController)。また、他の種類の情報を表示するために右側のスライドを使用したいと考えています。たとえば、ユーザーが地図上で選択したレストランのメニューを表示しますmenuViewController

私の質問は、 をスワップアウトする場合mapOptionsViewController、fromも手動でアウトするmenuViewController必要がありますか? 私の懸念は、 に切り替えたときに が解放/破棄されたとしても、まだ古い を指しているため、のメモリがヒープから解放されないことです。nilmapOptionsViewController.delegatemyMapViewControllermapOptionsViewControllermenuViewControllermyMapViewControllermapOptionsViewController.delegatemapOptionsViewController.delegate

したがって、基本的に、別のビュー コントローラー(マップ オプション)fooのデリゲートであるオブジェクト ビュー コントローラー (私のマップ) があり、そのような場合、 (レストラン メニュー) に切り替えると、から設定する必要がありますか? または、に置き換えられた結果、View Controller が含まれている場合はnilになりますか?barbar.delegate = foobarbazbar.delegate = nilfoobardelegatedelegatebaz

4

2 に答える 2

0

一言で言えば、いいえ。オブジェクトにまだ強い参照があり、そのオブジェクトへの文字列参照を持つ最後のオブジェクトが割り当て解除されていない限り、そのオブジェクトは割り当て解除されません。または、バグがあります。

また、weakそれを参照しているオブジェクトが割り当て解除されると、参照は自動的にゼロになります。しかしassign、そうではありません。

于 2013-06-06T11:18:49.233 に答える