0

我有这 3 个课程:

@interface BaseViewController : UIViewController
@interface BaseWebViewController : BaseViewController
@interface SecondaryWebViewController : BaseViewController

在 AppDelegate 中,我将 rootViewController 设置为 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

如果我理解正确,那么您就是在混合类和对象的概念。

根据您的描述,您的应用中有两个视图控制器对象。其中一个是类的实例BaseWebViewController另一个是类的实例SecondaryWebViewController

这两个实例是完全分开的。

当您的调用实例时,当它调用this 时,它只会调用类的 dealloc 方法-在同一个实例上。另一个视图控制器实例完全不受影响。SecondaryWebViewControllerdealloc[super dealloc]BaseWebViewController

我可能完全误解了,在这种情况下,请原谅我。如果我理解正确的话,你应该查一下类和对象的概念,这是继续下去的重要基础。

于 2012-08-11T20:32:22.553 回答