我有这三个班级:
@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。
很抱歉,如果这听起来很混乱,但基本上,流程看起来像这样:
目前,如果我在SecondaryWebViewController中注释掉[super viewDidLoad]和[super dealloc],以便从不释放BaseViewController,那么一切运行正常。但是,我不知道这是否是正确的做事方式。
在诸如此场景的子类中调用超级函数的方法是什么?
答案 0 :(得分:2)
如果我理解正确的话,你就是在混合类和对象的概念。
根据您的描述,您的应用中有两个视图控制器对象。其中一个是BaseWebViewController
类的实例,另一个是SecondaryWebViewController
类的实例。
这两个实例彼此完全分开。
当SecondaryWebViewController
的实例调用dealloc
时,当它调用[super dealloc]
时,这只会调用BaseWebViewController
类的dealloc方法 - < strong>在同一个实例上。另一个视图控制器实例完全不受影响。
我可能完全被误解了,在那种情况下请原谅我。如果我理解正确,你应该查找类和对象的概念,这是继续深入的重要基础。