美文网首页
iOS 由使用xib创建UIViewController引出的l

iOS 由使用xib创建UIViewController引出的l

作者: ios_暗夜行者 | 来源:发表于2021-08-30 16:24 被阅读0次

    最近在项目里遇到一个问题,加载一个带有xib的ViewController的时候,用的[[XIBTestViewController alloc] init]方法,没有指定xib文件,原以为会崩溃或者加载不出来,结果正常加载,并且正常显示xib的内容。

       原来用XIBTestViewController* xibVC=[[XIBTestViewController alloc] init];创建的时候,系统会调用loadVIew方法寻找和类同名的xib文件加载;这里要注意的是不能重写loadView方法,一旦重写,就无法自动匹配xib文件加载;

    代码创建ViewController时候:

    [[XIBTestViewController alloc] init]

    相关方法的调用顺序是这样的:

    1.- (id)init;

    2.- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil;

    3.- (void)loadView;

    4.- (void)viewDidLoad;

    init方法每次也会调用一下initWithNibName

    而loadView方法的作用就是为了创建UIViewController的view,创建过程是这样的:

    1.如果在创建ViewController时候指定了xib文件,就加载xib文件来创建UIViewController的view;

    2.如果创建ViewController时候没有指定xib文件,就查找和ViewController同名的xib文件来加载;

    3.如果没指定也没找到相关联的xib文件,就创建一个空白view赋值给UIViewController的view;

    这就是为什么创建UIViewController时候没有指定xib文件,也一样正常加载出来的原因。

      而loadView方法应该什么时候调用?

    - (void)loadView;// This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.

    苹果官方意思就是当在没有用到xib加载方式且需要自定义自己的view时候可以在这个方法里创建赋值,不应该直接被调用,而是由系统调用;

    错误用法:[self loadView],不能自己主动调用;

    比如不想用系统给默认创建的给ViewController的那个view,那就重写loadView方法:

    - (void)loadView{

       self.view=[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    }

    需要注意的是:重写loadView方法时候就不需要再调[super loadView]了,因为如果我们重写了loadView的方法,就代表着我们需要初始化的是自定义的view,而不再是系统默认的view,如果再调用[super loadView]就显得很多余了。

     链接:https://www.jianshu.com/p/5b00f9a6d8dd

    相关文章

      网友评论

          本文标题:iOS 由使用xib创建UIViewController引出的l

          本文链接:https://www.haomeiwen.com/subject/mlbmiltx.html