instancesRespondToSelector与respondToSelector的区别
1. instancesRespondToSelector只能写在类名后面,respondsToSelector可以写在类名和实例名后面。
2.[类instancesRespondToSelector]判断的是该类的实例是否包含某方法,等效于:[该类的实例respondsToSelector]。
3.[类respondsToSelector]用于判断是否包含某个类方法。
举例
.h文件
#import
@interface TestMethod : NSObject
-(void)objectFun;//实例方法
+(void)classFun;//类方法
@end
.m文件
#import "TestMethod.h"
@implementation TestMethod
-(void)objectFun
{
NSLog(@"%s",__FUNCTION__);
}
+(void)classFun
{
NSLog(@"%s",__FUNCTION__);
}
@end
实现
BOOL flag = NO;
flag =[TestMethod instancesRespondToSelector:@selector(objectFun)];//YES类有实例方法
NSLog(@"1=%@",flag?@"yes":@"no");
flag =[TestMethod instancesRespondToSelector:@selector(classFun)];//NO类没有实例方法
NSLog(@"2=%@",flag?@"yes":@"no");
flag =[TestMethod respondsToSelector:@selector(objectFun)];//NO没有这个类方法
NSLog(@"3=%@",flag?@"yes":@"no");
flag =[TestMethod respondsToSelector:@selector(classFun)];//YES有这个类方法
NSLog(@"4=%@",flag?@"yes":@"no");
TestMethod *obj =[[TestMethod alloc]init];
flag =[obj respondsToSelector:@selector(objectFun)];//YES实例有这个实例方法
NSLog(@"5=%@",flag?@"yes":@"no");
flag =[obj respondsToSelector:@selector(classFun)];//NO实例没有这个实例方法
NSLog(@"6=%@",flag?@"yes":@"no");