A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© u37kl 中级黑马   /  2016-2-20 15:03  /  608 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类本质(类对象、实例对象、匿名对象)
*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];,这样的话,只要程序不退出,该对象一直占用着堆内存空间,无法手动释放。

1 个回复

正序浏览
不错的笔记,,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马