OC判断对象类型

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 

-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

//YES   
if ([teacher isKindOfClass:[Teacher class]]) {  
}  
//YES   
if ([teacher isKindOfClass:[Person class]]) {  
}  
//YES   
if ([teacher isKindOfClass:[NSObject class]]) {  
}  

//YES   
if ([teacher isMemberOfClass:[Teacher class]]) {  
}  
//NO   
if ([teacher isMemberOfClass:[Person class]]) {  
  NSLog(@"teacher Person类的成员");  
}  
//NO   
if ([teacher isMemberOfClass:[NSObject class]]) {  
}

判断对象类型2

-(BOOL) respondsToSelector: selector 判断实例是否有这样方法

+(BOOL) instancesRespondToSelector:  判断类是否有这个方法。此方法是类方法,不能用在类的对象

Test1.h

@interface Test1 : NSObject

- (void)objectFun;

+ (void)classFun;

@end

Test1.m

@implementation Test1

- (void)objectFun
{
    NSLog(@"object function");
}

+ (void)classFun
{
    NSLog(@"class function");
}

@end

测试类:

BOOL flag;

//instancesRespondToSelector是一个类方法,用来判断该类是否有此实例方法,显然为第一个为YES,第二个为NO。
flag = [Test1 instancesRespondToSelector:@selector(objectFun)]; // YES, flag = [Test1 instancesRespondToSelector:@selector(classFun)]; // NO


 
  
//respondsToSelector既可以是类方法,又可以是实例方法。当作为类方法使用时,用来判断该类是否有此类方法,显然为第一个为NO,第二个为YES。
flag = [Test1 respondsToSelector:@selector(objectFun)]; // NO flag = [Test1 respondsToSelector:@selector(classFun)]; // YES


//respondsToSelector既可以是类方法,又可以是实例方法。当作为实例方法使用时,用来判断该类是否有此实例方法,显然为第一个为YES,第二个为NO。(此时,效果与instancesRespondToSelector一样)。
Test1 *obj = [[Test1 alloc] init];flag = [obj respondsToSelector:@selector(objectFun)]; // YES flag = [obj respondsToSelector:@selector(classFun)]; // NO

稍微写详细了点,源自

http://www.tuicool.com/articles/ruQBfm

http://www.cnblogs.com/wayne23/p/3872776.html


本人自建的一个iOS交流群165332140,欢迎各位大神进群交流指导。




你可能感兴趣的:(ios笔记)