0

私はこれらの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 を呼び出したくありません。

わかりにくいかもしれませんが、基本的にフローは次のようになります。

  1. AppDelegate は rootViewController を BaseWebViewController に設定します
  2. BaseWebViewController の viewDidLoad は、スーパークラス BaseViewController の viewDidLoad も呼び出します
  3. アプリの有効期間の大部分は BaseWebViewController で費やされますが、場合によっては、SecondaryWebViewController をプッシュする必要があります
  4. SecondaryWebViewController の viewDidLoad と dealloc は、スーパークラスの viewDidLoad と dealloc を呼び出し、奇妙な動作を引き起こします。

現在、SecondaryWebViewController の [super viewDidLoad] と [super dealloc] をコメントアウトして BaseViewController の割り当てが解除されないようにすると、すべて正常に動作します。ただし、これが正しい方法であるかどうかはわかりません。

このシナリオのようなサブクラスでスーパー関数を呼び出すアプローチは何ですか?

4

1 に答える 1

2

私があなたを正しく理解していれば、クラスとオブジェクトの概念が混在しています。

あなたの説明によると、アプリには 2 つのビュー コントローラーオブジェクトがあります。1 つはクラスのインスタンスで、もう 1 つはクラスのインスタンスです。BaseWebViewControllerSecondaryWebViewController

これら 2 つのインスタンスは、互いに完全に分離されています。

のインスタンスSecondaryWebViewController呼び出されたとき、これが呼び出されたdeallocときに、同じインスタンスでクラス[super dealloc]の dealloc メソッドを呼び出すだけです。もう一方のビュー コントローラー インスタンスはまったく影響を受けません。BaseWebViewController

完全に誤解しているかもしれませんが、その場合はご容赦ください。私の理解が正しければ、クラスとオブジェクトの概念を調べる必要があります。これは、先に進むための非常に重要な基礎です。

于 2012-08-11T20:32:22.553 に答える