SEL 类型 和 类的反射
SEL 类型
SEL 类型是用来描述一个方法的,可以理解为SEL是方法的指针.该SEL类型类似于Java中的Method类。
OC中可以通过两种方法来获得SEL类型。
- @selector(methodName) :
- NSSelectorFromString(@"methodName") ;
反射的方法
-(BOOL) isKindOfClass : (class) clazz
isKindOfClass 方法用来判断当前对象是否是一个类或者其子类的实例
[cat isKindOfClass: [Cat class]] ;
-(BOOL) isMemberOfClass : (class) clazz
isKindOfClass 方法用来判断当前对象是否是一个类的实例 ( 不包括子类)
[cat isMemberOfClass: [Cat class]] ;
-(BOOL) respondsToSelector : (SEL) sel
responseToSelector 方法用来判断当前对象能否响应指定方法
SEL catSay = NSSelectorFromString(@"say") ;
if ([cat respondsToSelector:catSay]){
[cat catSay] ;
}
-(id) performSelector : (SEL) sel
performSelector 方法用来动态的执行一个方法
SEL catSay = NSSelectorFromString(@"say") ;
// 通过一个对象动态执行一个方法
[cat performSelector:catSay];
-(id) performSelector : (SEL) sel withObject : (id) param
动态的执行一个方法并且传递参数。
// 通过一个对象动态执行一个方法,并且传递参数(参数最多只能两个,这是该performSelector方法的局限性)
[cat performSelector:catSay withObject:nil withObject:nil ] ;
以上都是实例方法,下面是类方法
+(BOOL) instancesRespondsToSelector : (SEL) sel
instancesRespondsToSelector判断类的实例是否可以响应方法
SEL catSay = NSSelectorFromString(@"say") ;
// 这是一个类方法
[Cat instanceMethodForSelector:catSay] ;
+(BOOL) isSubclassOfClass:(class) clazz
isSubclassOfClass 判断当前类是否是指定类的子类。
// 这是一个类方法
[Cat isSubclassOfClass:NSObject class] ;