loadView方法的实现(self.view调用addSubview方法与self.view=的区别)

开始写新的app,还是没使用ib来生成界面

之前cocoa china上找了个sample,见sample里在init方法里人工的去调用loadView方法,左思右想感觉别扭

对loadView的方法还存有疑问,于是继续google,看官方文档,顺便找到以下这篇文章

mark一下,希望对loadView方法的理解有进一步的帮助

转自:http://www.xiediansha.com/?p=165

UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访 问。但没有调用loadView方法时,self.view=nil。默认loadView方法(即[super  loadView])的作用是产生一个空白的view。

且看以下下两个例子:

Source code
- (void)loadView
{
    [super loadView];
    textView=[ [ UITextView alloc ] initWithFrame: [ [ UIScreen mainScreen ] applicationFrame ] ];
    textView.text=@"Hello";
    [self.view addSubview: textView];
}

Source code
 
    
  1. - ( void )loadView
  2. {
  3. textView = [ [ UITextView alloc ] initWithFrame : [ [ UIScreen mainScreen ] applicationFrame ] ];
  4. textView.text = @ "Hello";
  5. self.view =textView;
  6. }

两段代码起到的作用相同,但前一个例子把textView加入到self.view中,而后者则让self.view直接指向了 textView。把textView加入到self.view中则self.view不能为nil,因此需要调用[super  loadView]方法,后者不需要。

显然,继承UIViewController的subclass要实现其load方法时,若采用添加view的方式,我们只要在loadView中增加一句[super loadView]就没有问题了。但这并不是Cocoa的设计者所期望的。self.view = …才是提倡的方式。

需要主意的是,loadView的实现需要分两种情况:当你通过Xcode实例化一个类的时候就需要自己在controller中实现这个方法,而在IB中实例化就不需要实现它。

 

http://songyee.com/2011/08/31/%E8%BD%AC-loadview%E6%96%B9%E6%B3%95%E7%9A%84%E5%AE%9E%E7%8E%B0%EF%BC%88self-view%E8%B0%83%E7%94%A8addsubview%E6%96%B9%E6%B3%95%E4%B8%8Eself-view%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%89/

你可能感兴趣的:(苹果)