-(BOOL) isKindOfClass: classObj
判断是否是这个类或者这个类的子类的实例
-(BOOL) isMemberOfClass: classObj
判断是否是这个类的实例
使用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| if ([teacher isKindOfClass:[Teacher class]]) { NSLog(@"teacher 是 Teacher类或Teacher的子类"); }
if ([teacher isKindOfClass:[Person class]]) { NSLog(@"teacher 是 Person类或Person的子类"); }
if ([teacher isKindOfClass:[NSObject class]]) { NSLog(@"teacher 是 NSObject类或NSObject的子类"); }
if ([teacher isMemberOfClass:[Teacher class]]) { NSLog(@"teacher Teacher类的成员"); }
if ([teacher isMemberOfClass:[Person class]]) { NSLog(@"teacher Person类的成员"); }
if ([teacher isMemberOfClass:[NSObject class]]) { NSLog(@"teacher NSObject类的成员"); }
|
-(BOOL) respondsToSelector: selector
判断实例是否有这样方法
+(BOOL) instancesRespondToSelector:
判断类是否有这个方法。此方法是类方法,不能用在类的对象
使用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| if ( [teacher respondsToSelector: @selector( setName: )] == YES ) { NSLog(@"teacher responds to setSize: method" ); }
if ( [teacher respondsToSelector: @selector( abcde )] == YES ) { NSLog(@"teacher responds to nonExistant method" ); }
if ( [Teacher respondsToSelector: @selector( alloc )] == YES ) { NSLog(@"teacher class responds to alloc method\n" ); }
if ( [Person instancesRespondToSelector: @selector(teach)] == YES ) { NSLog(@"Person instance responds to teach method" ); }
if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) { NSLog(@"Teacher instance responds to teach method"); }
if ( [Teacher instancesRespondToSelector: @selector(setName:)] == YES ) { NSLog(@"Teacher instance responds to setName: method" ); }
|
C++ 使用的是强类型:对象必须符合其类型,否则不能通过编译。在 Objective-C 中,id类型类似于(void*) ,可以指向任何类的实例。而不需要强制转换。
实例如下:
1 2 3 4 5
| Person *person = [[Person alloc] init]; Teacher *teacher = [[Teacher alloc] init]; id p = person; id t = teacher;
|