2012-08-11 125 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方法 - 在相同的實例。其他視圖控制器實例完全不受影響。

我可能完全誤解了,在這種情況下,請原諒我。如果我理解正確,你應該查看類和對象的概念,這是繼續前進的重要基礎。