一、类与对象
1. 什么是类?什么是对象
- 类 是具备某些共性特征(相同属性、行为)的对象的抽象统称。如人类
- 对象 则是类的具体存在,需要开辟空间保存指向类的地址。
2. 根据类创建对象的内部实现
- 当使用new或 alloc方法创建对象,系统内部会:
(1) 给新建对象开辟存储空间
(2) 初始化对象的属性
(3) 返回对象的地址
因此需要一个指针来保存对象的地址。类名后紧跟*号 Person *p- 同时引出,类的本质是一个结构体,对象的本质则是指向结构体的指针
- 对象的存储细节
程序启动,先把程序加载到代码区。 系统自动创建一个类对象,加载类中的对象方法列表。
当通过一个类创建对象时,先在堆中开辟一块存储空间给对象p,再初始化对象的各属性为0,最后返回一个地址保存到栈中(局部变量接收)。对象的第0个属性是系统创建的isa指针,指向创建该对象的类。
3. 类方法与对象方法
- 类方法只能类调用,对象方法只能对象调用。
- 类方法和对象方法的选择
- 对象方法的调用每次都需要开辟存储空间 。
+ 当不需要使用属性尽量定义为类方法。
+ 类方法常使用为定义工具类 - 注意点
类方法只能类调用, 对象方法只能对象调用;
但是类方法内部可以允许对象调用对象方法,对象方法内部允许类调用类方法;
对象方法中允许访问属性,对象方法则不行;
4. SEL 数据类型
SEL将方法封装成sel 对象。SEL sel = @selector(test);
作用:
- 结合
respondsToSelector(sel)
, 判断类或对象是否有方法实现。 - 结合
performselector(sel)
, 执行类或对象的某个方法。
注意:performselector可以通过withObject带参数,最多带两个,参数必须是对象。 - SEL作为参数,可以实现一个对象控制另一个对象实现某方法。