Runtime判断一个类、方法是否存在

//判断一个类是否存在
if ((NSClassFromString(@"NSTouchBar")) != nil) {

}
//判断一个方法是否存在,然后执行
    SEL sel = NSSelectorFromString(@"provideWater");
    if ([obj respondsToSelector:sel]) {
        [obj performSelector:sel];
    }

有个特殊情况,比如iOS 9以后系统出了个新方法- (void)xxxx:(BOOL)isXXX;,我们想最低适配 iOS 7,此时我们可以判断一下该方法是否存在,但是参数是BOOL,怎么传?

//该方法要导入以下头文件
#import 
    SEL sel = NSSelectorFromString(@"xxxx:");
    if ([self respondsToSelector: sel]) {//判断该方法是否存在
        typedef void (*send_type)(Class*, SEL, BOOL);// Class 为方法所在的类
        send_type exec = (send_type)objc_msgSend;
        exec(self, sel, YES);
    }

你可能感兴趣的:(Runtime判断一个类、方法是否存在)