私はこれらの3つのクラスを持っています:
@interface BaseViewController : UIViewController
@interface BaseWebViewController : BaseViewController
@interface SecondaryWebViewController : BaseViewController
AppDelegate では、rootViewController を BaseWebViewController に設定しています。この BaseWebViewController は、アプリの存続期間全体で割り当てが解除されることはありません。BaseWebViewController では、それぞれのメソッドで [super viewDidLoad] と [super dealloc] を呼び出しています。
アプリの大部分で、ユーザーは BaseWebViewController にある UIWebView をナビゲートします。ただし、特定のリンクでは、SecondaryWebViewController をプッシュ (および後でポップアウト) する必要があります。
私の質問は、BaseWebViewController と SecondaryWebViewController の両方が BaseViewController をサブクラス化しているため、SecondaryWebViewController で [super viewDidLoad] と [super dealloc] を呼び出すことに関して何をすべきかわからないということです。
SecondaryWebViewController では、これらの [super viewDidLoad] と [super dealloc] を呼び出していましたが、特に [super dealloc] を呼び出したときにランダムにクラッシュするという問題が発生していることに気付きました。BaseWebViewController はアプリの存続期間全体を通じて常に存在する必要があるため、BaseViewController で dealloc を呼び出したくありません。
わかりにくいかもしれませんが、基本的にフローは次のようになります。
- AppDelegate は rootViewController を BaseWebViewController に設定します
- BaseWebViewController の viewDidLoad は、スーパークラス BaseViewController の viewDidLoad も呼び出します
- アプリの有効期間の大部分は BaseWebViewController で費やされますが、場合によっては、SecondaryWebViewController をプッシュする必要があります
- SecondaryWebViewController の viewDidLoad と dealloc は、スーパークラスの viewDidLoad と dealloc を呼び出し、奇妙な動作を引き起こします。
現在、SecondaryWebViewController の [super viewDidLoad] と [super dealloc] をコメントアウトして BaseViewController の割り当てが解除されないようにすると、すべて正常に動作します。ただし、これが正しい方法であるかどうかはわかりません。
このシナリオのようなサブクラスでスーパー関数を呼び出すアプローチは何ですか?