黑马程序员技术交流社区

标题: 类对象、实例对象、匿名对象 [打印本页]

作者: u37kl    时间: 2016-2-20 15:03
标题: 类对象、实例对象、匿名对象
类本质(类对象、实例对象、匿名对象)
*1、实例对象创建过程:
1>程序启动时,会加载所有的类和分类,不管后面是否使用到其中的某些类,加载顺序是先父类后子类,最后加载分类,每加载完一个类就调用类的load方法。
2>当使用到该类时,创建该类的类对象,并调用initialize方法初始化类对象,调用initialize方法顺序是先父类后子类,如果父类有分类,调用分类的initialize方法,不再调用父类的该方法。
3>使用类对象创建类的对象。

2、实例对象和类对象区别:
1>类对象在内存中只能有一份,而实例对象在内存中可以有多份。
2>实例对象只能通过类对象才能创建。

3、获得类对象方法:
Person *p = [[Person alloc] init];
Class clazz = [p class]; // 通过类实例对象获得类对象。

Class clazz = [Person class]; // 通过类名获得类对象。

4、Class 类型本质为结构体指针:typedef struct objc_class *Class;,因此保存类对象变量无需加“ * ”。
5、load和initialize方法执行顺序:
1>先执行父类的load,再执行子类的load,最后才是分类的load。
2>先执行父类的initialize方法,再执行子类的initialize方法。
3>父类有分类,并且分类实现了initialize方法时,先执行分类的initialize方法,再执行子类的initialize方法。
4>父类有分类,并且分类没有initialize方法时,先执行父类的initialize方法,再执行子类的initialize方法。

6、load和initialize方法执行时间:
1>当程序启动时,程序会加载所有的类和分类,所有的类和分类的load方法都必须执行一次,并且在程序生命周期中只能执行一次。
2>当第一次使用到类对象时,类对象才会调用initialize方法,并且在程序生命周期中只能执行一次。

7、类对象中保存着该类的方法列表。
8、匿名对象就是创建后不使用指针指向,例如[Person new];,这样的话,只要程序不退出,该对象一直占用着堆内存空间,无法手动释放。

作者: songzengyu    时间: 2016-2-21 13:24
不错的笔记,,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2