IOS OC中类方法+(void)load 和 +(void)initialize 初步了解

Apple中的文档说明了 initialize和load的区别在于:

  1. load只要类所在文件被引用就会被调用
  2. initialize 是在类或者其子类的第一个方法被调用前调用
    相同点:都只会调用一次,(相对于runtime来说的)
地方 +(void)load +(void)initialize
执行时间 只要文件被引用,程序运行后立即执行 在类的方法第一次被调用前(引用并被初始化)时执行
自身未定义会沿用父类的方法吗
类别中的定义 全都执行但是后于类中的方法 覆盖类中的方法,只执行一个

使用总结

  1. load和initialize方法都会在实例化对象之前调用,以main函数为分水岭,前者在main函数之前调用,后者在之后调用。这两个方法会被自动调用,不能手动调用它们。
  2. load和initialize方法都不用显示的调用父类的方法而是自动调用,即使子类没有initialize方法也会调用父类的方法,而load方法则不会调用父类。
  3. load方法通常用来进行Method Swizzle,initialize方法一般用于初始化全局变量或静态变量。
  4. load和initialize方法内部使用了锁,因此它们是线程安全的。实现时要尽可能保持简单,避免阻塞线程,不要再使用锁。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • load load方法在这个文件被程序装载时调用(这个类被加入内存的时候调用),这与这个类是否被用到无关,因此lo...
    摄影师诺风阅读 3,318评论 0 0
  • OC中有两个特殊的类方法,分别是load和initialize。本文总结一下这两个方法的区别于联系、使用场景和注意...
    RobinYu阅读 3,126评论 0 3
  • iOS开发中总能看到+load和+initialize的身影,网上对于这两个方法有很多解释,官方也有说明,但有些细...
    朱晓辉阅读 27,585评论 19 139
  • load 和 initialize 两个方法算是两个特殊的类方法了,今天偶然从草稿箱中看到还有本篇未完成的博文,如...
    RITL阅读 5,434评论 8 13
  • 冬天来了,当我们脱去厚厚的冬装,不知不觉,春天的脚步还远吗?春天,对爱美的你来说,是个既美妙又烦心的季节,因为,在...
    拥抱幸福a阅读 2,738评论 0 0