第51条 :精简initialize与load的实现代码

对于加入运行期系统中的每个类(class)及分类(category)来说,必定会调用此方法,而且仅调用一次。通常在应用程序启动的时候,就会执行此方法。如果分类和其所属的类都定义了load方法,则先调用类里面的,再调用分类里面的。

  • (void)initialize
    对于每个类来说,该方法会在程序首次用该类之前调用,且只调用一次。它是由运行期系统来调用的,绝不应该通过代码直接调用。

首先,它是“惰性调用的”,也就是说,只有当程序用到了相关的类时,才会调用。因此,如果某个类一直都没有使用,那么initialize方法就一直不会运行。这就等于说,应用程序无须先把每个类的initialize都执行一遍,这与load方法不同。对于load来说,应用程序必须阻塞并等着所有类的load都执行完毕,才能继续。

要点

  • 在加载阶段,如果类实现了load方法,那么系统就会调用它。分类里面也可以定义此方法,类的load方法要比分类中的先调用。与其他方法不同,load方法不参与覆写机制。

  • 首次使用某个类之前,系统会向其发送initialize消息。由于此方法遵从普通的覆写规则,所以通常应该在里面判断当前初始化的是哪个类。

  • 无法再编译期设定的全局常量,可以放在initialize方法里初始化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容