码迷,mamicode.com
首页 > 其他好文 > 详细

SEL 类型 和 类的反射

时间:2015-03-11 23:14:19      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

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] ;

SEL 类型 和 类的反射

标签:

原文地址:http://www.cnblogs.com/mrwu/p/4331153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!