+load和+initialize的区别

168 阅读1分钟

######在不考虑一切继承、分类的最简单最普通的情况下:

  • 调用时刻:

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

  • 调用次数

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


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

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

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

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

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