+load和+initialize的区别


在不考虑一切继承、分类的最简单最普通的情况下:
  • 调用时刻:

load:程序启动时,类被加载进内存就调用
initialize:当第一次使用这个类或者其子类就会调用

  • 调用次数

load:因为加载进内存只会加载一次,所以也只会调用一次
initialize:不确定,具体根据子类和具体调用情况
比如有个类,它有一个子类,第一次使用子类时,父类的initialize会被调用2次


上面说的只是普通情况。但是呢,一个类可能继承于某个super类,还有可能有自己的分类,如果分类中也实现了load方法,它们的调用顺序是怎么样的呢?

这里需要知道--->覆盖方法在分类中的体现
如果父类本身中的方法在子类中被重写,则会优先执行子类中的方法
如果类本身中的方法在分类中被重写,则会优先执行分类中的方法

但是这里必须要知道一个特例->+load

系统首先会调用 super类的load方法,然后再调用该类自身的load方法,再次才会调用该类的分类重写的load方法,也即是说整个继承链包括分类扩展中的load方法都会被执行,只是执行顺序需要关注一下。

也就是说,假如你重写了某个类的load方法,同时又在该类的分类中也重写了load方法,你就会发现这个类的load被调用了两次。

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

推荐阅读更多精彩内容