Objective-C 动态类型(isKindOfClass, isMemberOfClass,respondsToSelector,instancesRespondToSelector

判断对象类型1

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

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

使用方法:

//YES   
if ([teacher isKindOfClass:[Teacher class]]) {  
  NSLog(@"teacher 是 Teacher类或Teacher的子类");  
}  
//YES   
if ([teacher isKindOfClass:[Person class]]) {  
  NSLog(@"teacher 是 Person类或Person的子类");  
}  
//YES   
if ([teacher isKindOfClass:[NSObject class]]) {  
  NSLog(@"teacher 是 NSObject类或NSObject的子类");  
}  

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

判断对象类型2

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

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

使用方法

// YES   
if ( [teacher respondsToSelector: @selector( setName: )] == YES ) {  
  NSLog(@"teacher responds to setSize: method" );  
}  
// NO   
if ( [teacher respondsToSelector: @selector( abcde )] == YES ) {  
  NSLog(@"teacher responds to nonExistant method" );  
}  
// YES   
if ( [Teacher respondsToSelector: @selector( alloc )] == YES ) {  
  NSLog(@"teacher class responds to alloc method\n" );  
}  
// NO   
if ( [Person instancesRespondToSelector: @selector(teach)] == YES ) {  
  NSLog(@"Person instance responds to teach method" );  
}  
// YES   
if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) {  
  NSLog(@"Teacher instance responds to teach method");  
}  
// YES   
if ( [Teacher instancesRespondToSelector: @selector(setName:)] == YES ) {  
  NSLog(@"Teacher instance responds to setName: method" );  
}

Objective-C的id类型

C++ 使用的是强类型:对象必须符合其类型,否则不能通过编译。在 Objective-C 中,id类型类似于(void*) ,可以指向任何类的实例。而不需要强制转换。 
实例如下:

Person *person = [[Person alloc] init];  
Teacher *teacher = [[Teacher alloc] init];  
  
id p = person;  
id t = teacher;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值