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

{app.params.name}} {app.params.name}} {app.params.name}}

判断对象类型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;  


版权声明

davidzhang 创作并维护的 Gowhich 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 Gowhich 博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/163

comments powered by Disqus