美文网首页
initialize 与 load的区别

initialize 与 load的区别

作者: JackHZG | 来源:发表于2018-08-17 23:32 被阅读0次

    有时候,类必须执行某些初始化操作才能正常使用。OC中的大部分类都继承自NSObject,它提供了两个可以执行初始化操作的方法。

    • (void)load;
      被加入运行期系统(iOS一般是应用启动时)的类和分类都会调用这个方法,只调用一次。先调用类里的,再调用分类的。按照分类引入的顺序,调用分类的load方法。

    在load方法中调用别的类是不安全的!因为不知道它们调用的顺序,比如代码中还依赖别的库,别的库的相关类的load方法也会执行,会出现交叉的情况。

    注意:load方法不遵从继承。即:类中没实现load方法,不管超类是否实现load方法,都不会去执行。能精简尽量精简。

    • (void)initialize;
      首次用类的时候会调用这个类,只调用一次,惰性调用。它是由运行时系统来调用的,不能直接调用。

    initialize方法是在线程安全的环境下调用,可以操作类或类的实例

    initialize方法遵循继承规则,如果类中没实现它,会去调用超类中的实现。

    方法里的代码要精简,设置一些状态,是类能正常进行即可,不要执行一些耗时或者需要加锁的任务。

    initialize方法只应该用来设置内部数据。不应该在其中调用别的方法,即使是自己的方法也不该调用。例如:某个全局状态在编译器没办法编译期初始化,就可以放在这里。
    比如:单例类在首次调用之前,必须执行某些操作,就可以使用initialize方法。

    相关文章

      网友评论

          本文标题:initialize 与 load的区别

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