SEL 类型 和 类的反射

SEL 类型

SEL 类型是用来描述一个方法的,可以理解为SEL是方法的指针.该SEL类型类似于Java中的Method类。
OC中可以通过两种方法来获得SEL类型。

  1. @selector(methodName) :
  2. NSSelectorFromString(@"methodName") ;

反射的方法

-(BOOL) isKindOfClass : (class) clazz

isKindOfClass 方法用来判断当前对象是否是一个类或者其子类的实例

  1. [cat isKindOfClass: [Cat class]] ;

-(BOOL) isMemberOfClass : (class) clazz

isKindOfClass 方法用来判断当前对象是否是一个类的实例 ( 不包括子类)

  1. [cat isMemberOfClass: [Cat class]] ;

-(BOOL) respondsToSelector : (SEL) sel

responseToSelector 方法用来判断当前对象能否响应指定方法

  1. SEL catSay = NSSelectorFromString(@"say") ;
  2. if ([cat respondsToSelector:catSay]){
  3. [cat catSay] ;
  4. }

-(id) performSelector : (SEL) sel

performSelector 方法用来动态的执行一个方法

  1. SEL catSay = NSSelectorFromString(@"say") ;
  2. // 通过一个对象动态执行一个方法
  3. [cat performSelector:catSay];

-(id) performSelector : (SEL) sel withObject : (id) param

动态的执行一个方法并且传递参数。

  1. // 通过一个对象动态执行一个方法,并且传递参数(参数最多只能两个,这是该performSelector方法的局限性)
  2. [cat performSelector:catSay withObject:nil withObject:nil ] ;

以上都是实例方法,下面是类方法


+(BOOL) instancesRespondsToSelector : (SEL) sel

instancesRespondsToSelector判断类的实例是否可以响应方法

  1. SEL catSay = NSSelectorFromString(@"say") ;
  2. // 这是一个类方法
  3. [Cat instanceMethodForSelector:catSay] ;

+(BOOL) isSubclassOfClass:(class) clazz

isSubclassOfClass 判断当前类是否是指定类的子类。

  1. // 这是一个类方法
  2. [Cat isSubclassOfClass:NSObject class] ;

posted @ 2015-03-11 22:29  malongs.com  阅读(227)  评论(0编辑  收藏  举报