iOS开发笔记 关于+ initialize 方法和+load方法

1. 调用时机

load方法:

load方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量。它会在main函数之前调用,先调用类中的,再调用类别中的(类别中如果有重写)

initialize方法:

当向该类发送第一个消息(一般是类消息首先调用,常见的是alloc)的时候,initialize方法就会被调用。先调用类中的,再调用类别中的(类别中如果有重写);如果该类只是引用,没有调用,则不会执行initialize方法。

两者方法的共同点:会自动调用父类的方法,不需要super操作;自动调用仅仅会调用一次(不包括外部显式调用)。

2. 总结

  • 如果你实现了 + load 方法,那么当类被加载时它会自动被调用。这个调用的时间非常早。如果你实现了一个应用或框架的 + load,并且你的应用链接到这个框架上了,那么 + load 会在main() 函数之前被调用。如果你在一个可加载的 bundle 中实现了 + load,那么它会在 bundle 加载的过程中被调用。

  • + initialize 方法的调用看起来会更合理,通常在它里面写代码比在+ load 里写更好。+ initialize 是懒调用的,它有可能完全不被调用。类第一次被加载时,+ initialize不会被调用。类接收消息时,运行时会先检查 + initialize有没有被调用过。如果没有,会在消息被处理前调用。

  • 如果子类如果有重写+ initialize,则在init之前会调用自己的+ initialize;如果没有的话就调用父类的+ initialize

你可能感兴趣的:(iOS开发笔记 关于+ initialize 方法和+load方法)