1.load
20160312163815426.png+load 方法是当类或分类被添加到 Objective-C runtime 时被调用的,实现这个方法可以让我们在类加载的时候执行一些类相关的行为。子类的 +load 方法会在它的所有父类的 +load 方法之后执行,而分类的 +load 方法会在它的主类的 +load 方法之后执行。但是不同的类之间的 +load 方法的调用顺序是不确定的。
子类 +load 方法等父类先执行完 +load 方法才执行。
分类 +load 方法会在它的主类 +load 方法之后执行。
2.+initialize 方法
20160312163841218.png+initialize 方法是在类或它的子类收到第一条消息之前被调用的,这里所指的消息包括实例方法和类方法的调用。也就是说 +initialize 方法是以懒加载的方式被调用的,如果程序一直没有给某个类或它的子类发送消息,那么这个类的 +initialize 方法是永远不会被调用的。那这样设计有什么好处呢?好处是显而易见的,那就是节省系统资源,避免浪费。
runtime 使用了发送消息 objc_msgSend 的方式对 +initialize 方法进行调用。也就是说 +initialize 方法的调用与普通方法的调用是一样的,走的都是发送消息的流程。换言之,如果子类没有实现 +initialize 方法,那么继承自父类的实现会被调用;如果一个类的分类实现了 +initialize 方法,那么就会对这个类中的实现造成覆盖。
因此,如果一个子类没有实现 +initialize 方法,那么父类的实现是会被执行多次的。
3.只有实现了load方法的类才会调用这个方法,虽然继承了父类的,但这个父类的load不会当作子类的load被runtime调用
**具体分析 详见这个网站
http://blog.iderzheng.com/objective-c-load-vs-initialize/
http://www.cocoachina.com/ios/20150104/10826.html
load方法的应用 http://blog.sunnyxx.com/2015/03/09/notification-once/
屏幕快照 2016-03-15 17.50.44.png所有类也是对象( 类对象) 都是class类型的对象class内部包含*
加载普通对象时 先把类加载进内存 每种类内存中只存在一份
屏幕快照 2016-03-15 17.21.59.png利用Class创建 Person类对象
利用Person类对象 创建Person类型的对象
屏幕快照 2016-03-15 17.22.33.png示意图
test是类方法
[Person test] 等价与
Person *p = [[Person alloc]init]
Class c = [p class]
[c test]
就是一个class类型的内存地址
网友评论