调用已编译成静态库的插件私有接口的方法

来源:互联网 发布:淘宝助手菜鸟打印组件 编辑:程序博客网 时间:2024/06/04 00:44

首先,我们需要分析该类的私有方法 

        NSString *className = NSStringFromClass(NSClassFromString(@"XXXXXX"));//私有类类名    const char *cClassName = [className UTF8String];    id theClass = objc_getClass(cClassName);    unsigned int outCount;    unsigned int outCount2;    Method *m = class_copyMethodList(theClass,&outCount);    objc_property_t *t=class_copyPropertyList(theClass, &outCount2);    NSLog(@"%d",outCount);    for (int i = 0; i<outCount; i++) {//获取方法        SEL a = method_getName(*(m+i));        NSString *sn = NSStringFromSelector(a);        NSLog(@"%@",sn);    }    NSLog(@"==============");    for (int i = 0; i<outCount2; i++) {//获取属性        NSString *sn = [NSString stringWithCString:property_getName(*(t+i)) encoding:NSUTF8StringEncoding];        NSLog(@"%@",sn);    }


得到了类的私有方法,接下来我们只需要创建一个相应的实体就可以调用了。

    Class cls = NSClassFromString(@"XXXX");//私有类类名    id test=[[cls alloc]init];    SEL selector = @selector(xxxx);    if (test &&[test respondsToSelector:selector]) {        [test performSelector:selector];    }


PS:静态库所使用的私有类类名,可通过Instruments工具监控生成的对象来获取

0 0