方法ViewDidLoad没有从子类调用?

时间:2011-11-01 07:42:14

标签: iphone objective-c xcode cocoa-touch

在我的iPhone应用程序中

我有两个视图控制器。

他们有SuperClass-SubClass Relation。(继承)。

假设ViewController1是一个SuperClass而ViewController2是一个SubClass。

他们都共享一个超级类的公共nib文件。

所以,理想情况下,ViewController1的所有方法都继承到ViewController2(如果我没有在ViewController2中重写它)。

所以,要检查这个当我

我的viewcontroller2加载未从超类调用的viewDidLoad。

**ViewController1

-ViewDidLoad

-ViewWillApper


**ViewController2

Other methods but I am not writing ViewDidLoad and ViewWillAppear
//---------------

所以,当调用这个单独的页面ViewController2时。 ViewDidLoad不是SuperClass的调用。 但是调用了ViewWillAppear。

2 个答案:

答案 0 :(得分:1)

可能只调用-viewDidLoad:一次,因为在两个类之间共享同一个nib文件。在第一次将笔尖加载到内存后,调用-viewDidLoad:。它不是第二次被调用,因为它只是从已经存在的内存中重用,因此不需要重新加载。这可以解释为什么仍然会调用-viewWillAppear:

UIViewController Class Reference: -viewDidLoad:

  

viewDidLoad

     

在控制器的视图加载到内存后调用。

     
      
  • (无效)viewDidLoad中
  •   
     

讨论

     

在视图控制器将其关联的视图加载到内存后调用此方法。调用此方法   无论视图是存储在nib文件中还是创建   以编程方式在loadView方法中。这种方法最常见   用于对视图执行其他初始化步骤   从nib文件加载。

答案 1 :(得分:0)

你怎么能说你的ViewController1ViewController2有继承?发布ViewController2.h文件的代码。

你在做什么

@interface ViewController2 : ViewController1 {
}

如果您正在执行上述操作,则只能说您从VC1继承了VC2。只有这样,您才能调用VC1的viewDidLoad

如果您只使用1个xib文件和2个VC,那么您所讨论的案例并不意味着您继承。

当你写

ViewController1 *vc1 = [[ViewController1 alloc] initWithNibName:@"ViewController1"];

ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController1"];

这意味着您重复使用.xib文件并且不继承该类...