一. 动态类型检测
/**********************对象和类之间的判断***********************/
1、isKindOfClass:Class
判断实例对象是否是这个类或者这个类的子类的实
例。
2、isMemberOfClass:Class
判断对象是否是这个类的实例。
/**********************类和类之间的判断*******************/
3、+(BOOL) isSubclassOfClass:classObj
判断类是否是指定类的子类。
格式: [类A isSubclassOfClass:类B];
判断类A是否是类B的子类; 是 YES 不是 NO
/**********************对象和方法之间的判断*******************/
4、- (BOOL)respondsToSelector:(SEL)aSelector; 用的比较多;
判断对象是否可以调用这个方法;
5、+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
判断类是否有这个方法。此方法是类方法, 不能用在类的对象
/**********************方法的执行*******************/
6,响应方法
-(id) performSelector:selector(应用selector指定的方法) NSObject的方法
// 一个参数
-(id) performSelector:selector withObject:object(应用selector指定的方法,传递参数 object)
// 二个参数
-(id) performSelector:selector withObject:object1 withObject:object2(应用selector指 定的方法,传递参数object1和object2)
二, 构造方法
1,什么是构造方法:
用来初始化对象的就是构造方法;是个对象方法,- 开头
2,创建对象:Person *p=[Person new];默认初始化
new方法内部做了3件事情:
(1)使用alloc方法来分配存储空间(返回分配的对象);
(2)使用init方法来对象进行初始化。
(3)返回对象的内存首地址。
可以把new方法拆开如下:
(1).调用类方法alloc分配存储空间,返回未经初始化的对象
Person *p1=[Person alloc];
(2).调用对象方法init进行初始化,返回对象本身
Person *p2=[p1 init];
(3).以上两个过程整合为一句:
Person *p=[[Person alloc] init];
注意:
alloc只是为该类分配内存空间,以存放该类的全部实例变量 。
init方法就是构造方法,是用来初始化对象的方法。
一个刚刚分配的对象并不能立即使用 ,
需要先初始化该对象,然后才能使用它 ,
如果未进行初始化, 随后可能会出现一些不可预测的行为.
默认初始化:
1,给基本数据类型的变量 初始化值为0;
2,给对象类型 初始化值为nil(值0);
三. 重写构造方法
重写构造方法的目的:
对象创建完成后,自动有一些默认值。
重写构造方法的固定格式:
1.初始化父类的成员变量;
2.初始化子类成员变量;
3返回当前子类对象;
代码如下:
- (instancetype)init{
self = [super init];
if (self) {
}
return self;
}
1. [super init]的作用:先调用父类的初始化方法,对从父类继承过来的成员变量进行初始化。初始化完了之后,返回我当前的对象指针。
2. 重写构造方法注意事项:
构造方法使用注意
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候 应该首先对从父类继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:先调用父类的构造方法[super init]; 再进行子类内部成员变量的初始化。
|
|