私の iOS アプリは、次の構造のナビゲーション ベースです。
@interface ViewControllerA : UIViewController
@property (strong,nonatomic) ViewControllerB *viewControllerB;
@property (strong,nonatomic) ViewControllerC *viewControllerC;
...
viewControllerB
がそれらをプッシュする前にviewControllerC
インスタンス化されます。ViewControllerA
navigationController
私の理解では、保持されているものはすべてViewControllerA
nil in に設定する必要がありViewControllerA
ますviewDidUnload
。子View Controllerにも同じことをする必要がありますか? このような:
-(void)viewDidUnload
{
self.viewControllerB=nil;
self.viewControllerC=nil;
}
から開始された「受信メモリ警告」があったときに問題を発見しましたviewControllerC
。その後、viewDidUnload
親ビュー コントローラ (つまりviewControllerA
) が呼び出され、nil が「viewControllerB」に設定されました。意外にも、viewControllerB の viewDidUnload も呼び出されます。そのため、 nil を のサブビュー ( 内) に設定すると、「割り当て解除されたオブジェクトにメッセージが送信されました」というメッセージが表示されましviewControllerB
た。viewControllerB
viewDidUnload
nil を子ビュー コントローラーに設定してはならないということですか? この状況でのメモリ管理のベスト プラクティスは何ですか?
PS私はARCを使用しています。