系统方法调用

+(void)load;

  • 当类对象被引入项目时, runtime 会向每一个类对象发送 load 消息
  • load 方法会在每一个类甚至分类被引入时仅调用一次,调用的顺序:父类优先于子类, 子类优先于分类
  • 由于 load 方法会在类被import 时调用一次,而这时往往是改变类的行为的最佳时机,在这里可以使用例如 method swizlling 来修改原有的方法
  • load 方法不会被类自动继承
+(void)initialize
  • 也是在第一次使用这个类的时候会调用这个方法,也就是说 initialize也是懒加载
总结:
在Objective-C中,runtime会自动调用每个类的这两个方法
+load会在类初始加载时调用
+initialize会在第一次调用类的类方法或实例方法之前被调用
这两个方法是可选的,且只有在实现了它们时才会被调用
两者的共同点:两个方法都只会被调用一次
loadView
  • 作用:控制器会调用方法去创建控制器的View.
  • 什么时候调用:当第一次使用控制器的View
  • 开发中loadView使用场景:自定义控制器的View.
    • 一旦重写了loadView,表示需要自己创建控制器的View.
    • 如果控制器的View还没有赋值,就不能调用控制器View的get方法.会造成死循环,因为控制器View的get方法底层会调用loadView方法.
layoutSubviews调用时间:
  • init初始化不会触发layoutSubviews
addSubview会触发layoutSubviews
  • 设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
  • 滚动一个UIScrollView会触发layoutSubviews
  • 旋转Screen会触发父UIView上的layoutSubviews事件
  • 【系统方法调用】改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

    推荐阅读