2012-08-11 81 views
0

我有这3类:不调用[超级viewDidLoad中]和子类[超级的dealloc]

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

在AppDelegate中,我设置RootViewController的是BaseWebViewController将永远不会被整个取消alloced应用程序的整个生命周期。在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永远不会被处理,那么一切运行良好。但是,我不知道这是否是正确的做事方式。

在这种情况下,在子类中调用超级函数的方法是什么?

回答

2

如果我正确地理解了你,你正在混合类和对象的概念。

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

这两个实例是完全独立的。

当您实例SecondaryWebViewController电话dealloc,当它调用[super dealloc]这只是调用BaseWebViewController类的dealloc方法 - 在相同的实例。其他视图控制器实例完全不受影响。

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