1)判断类型
- (BOOL)isKindOfClass:(Class)aClass;
判断某个对象是不是某个类的实例对象或者是其子类的实例对象 - (BOOL)isMemberOfClass:(Class)aClass;
判断对象是否是指定类的实例,不管是不是其子类的实例 - (BOOL)isSubclassOfClass:(Class)aClass;
//判断类是否是指定类的子类
例如:
#import <Foundation/Foundation.h>
#pragma mark Animal类声明部分
@interface Animal: NSObject
-(void)eat;
@end
#pragma mark Animal类实现部分
@implementation Animal
-(void)eat{
NSLog(@"Animal eat...");
}
@end
#pragma mark Dog类声明部分
@interface Dog: Animal
-(void)eat;
@end
#pragma mark Dog类实现部分
@implementation Dog
-(void)eat{
NSLog(@"Dog eat...");
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
id dog = [Dog new];
//检测一下是否是Animal的类实例对象,或是其子类的实例
if ([dog isKindOfClass:[Animal class]]) {
NSLog(@"dog is a kindof Animal");
} else{
NSLog(@"dog is not akind of Animal");
}
//判断对象是否是指定类的实例,不管是不是其子类的实例
if ([dog isMemberOfClass:[Animal class]]) {
NSLog(@"dog is amember of Animal");
}else{
NSLog(@"dog is not amember of Animal");
}
//判断类是否是指定类的子类
//[Dog isSubclassOfClass:[Animal class]]也可以
if ([[dog class]isSubclassOfClass:[Animal class]]) {
NSLog(@"dog is asubclass of Animal");
}else{
NSLog(@"dog is not asubclass of Animal");
}
}
return 0;
}
判断对象能否响应指定的方法
id dog = [Dog new];
//判断dog能否响应eat方法
if ([dog respondsToSelector:@selector(eat)]) {
[dogeat];
}else{
NSLog(@"dog cannnotrespond to eat function");
}
判断类是否有某个方法
//判断类能否响应eat方法,可以理解为该类中有木有eat方法,可以是从父类继承的,【注意】更对象响应不一样
if ([Dog instancesRespondToSelector:@selector(eat)]) {
NSLog(@"Dog have eatfunction");
}else{
NSLog(@"Dog have noeat function");
}
响应方法
#import <Foundation/Foundation.h>
#pragma mark Animal类声明部分
@interface Animal: NSObject
-(void)eat;
@end
#pragma mark Animal类实现部分
@implementation Animal
-(void)eat{
NSLog(@"Animal eat...");
}
@end
#pragma mark Dog类声明部分
@interface Dog: Animal
-(void)eat:(NSString*)food;
-(void)eat:(NSString*)name andFood:(NSString*)food;
@end
#pragma mark Dog类实现部分
@implementation Dog
-(void)eat:(NSString*)food{
NSLog(@"Dog eat %@",food);
}
-(void)eat:(NSString*)name andFood:(NSString*)food{
NSLog(@"%@ eat %@",name,food);
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
id dog = [Dog new];
//判断dog能否响应eat方法
//响应无参方法
SEL sel = @selector(eat);
if ([dog respondsToSelector:sel]) {
[dog performSelector:sel];
}else{
NSLog(@"dog cannnotrespond to eat function");
}
//响应有参方法,一个参数
SEL sel2 = @selector(eat:);
if ([dog respondsToSelector:sel2]) {
[dogperformSelector:sel2 withObject:@"Fish"];
}else{
NSLog(@"dog cannnotrespond to eat function");
}
//响应有参方法,两个参数
SEL sel3 = @selector(eat:andFood:);
if ([dog respondsToSelector:sel3]) {
[dog performSelector:sel3 withObject:@"小黑" withObject:@"Shit"];
}else{
NSLog(@"dog cannnotrespond to eat function");
}
}
return 0;
}