美文网首页iOS精选我依然爱iOS
OC中load方法和initialize方法的异同

OC中load方法和initialize方法的异同

作者: Cloudox_ | 来源:发表于2017-11-23 11:03 被阅读8次

    对于OC中的类来说,在runtime中会有两个方法被调用:

    • +load
    • +initialize

    这两个方法看起来都是在类初始的时候调用的,但其实还是有一些异同,从而可以用来做一些行为。

    +load

    首先,load方法是一定会在runtime中被调用的,只要类被添加到runtime中了,就会调用load方法,所以我们可以自己实现laod方法来在这个时候执行一些行为。

    而且有意思的一点是,load方法不会覆盖。也就是说,如果子类实现了load方法,那么会先调用父类的load方法,然后又去执行子类的load方法。同样的,如果分类实现了load方法,也会先执行主类的load方法,然后又会去执行分类的load方法。所以父类的load会执行很多次,这一点需要注意。而且执行顺序是 类 -> 子类 ->分类。而不同类之间的顺序不一定。

    +initialize

    与load不同的是,initialize方法不一定会执行。只有当一个类第一次被发送消息的时候会执行,注意是第一次。什么叫发送消息呢,就是执行类的一些方法的时候。也就是说这个方法是懒加载,没有用到这个类就不会调用,可以节省系统资源。

    还有一点截然相反,却更符合我们预期的就是,initialize方法会覆盖。也就是说如果子类实现了initialize方法,就不会执行父类的了,直接执行子类本身的。如果分类实现了initialize方法,也不会再执行主类的。所以initialize方法的执行覆盖顺序是 分类 -> 子类 ->类。且只会有一个initialize方法被执行。


    查看作者首页

    相关文章

      网友评论

        本文标题:OC中load方法和initialize方法的异同

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