美文网首页
iOS底层应用

iOS底层应用

作者: 小人物_b | 来源:发表于2019-03-04 17:28 被阅读0次

1、调用私有方法

已创建一个FirstObj 类,其中有一个方法

- (void)first_Method1:(NSString *)str1 andParm:(NSString *)str2
{
    NSLog(@"params =  %@,%@",str1,str2);
}
如何调用这个私有方法?
unsigned int count = 0;
    Method *methods =  class_copyMethodList([FirstObj class], &count);
    NSMutableArray *paramsArr = [NSMutableArray array];
    for(int i=0;i<count;i++){
        [paramsArr removeAllObjects];
        Method md = methods[i];
        SEL sel =  method_getName(md);
        NSLog(@"方法名:%@",NSStringFromSelector(sel));
        unsigned int argumentCounts = method_getNumberOfArguments(md);
        char argInfo[512] = {};
        for(int j=0;j<argumentCounts;j++){
            //获取参数类型
            method_getArgumentType(md, j, argInfo, 512);
            [paramsArr addObject:[NSString stringWithFormat:@"%s",argInfo]];
            memset(argInfo, '\0', strlen(argInfo));
        }
        //"@"表示对象 ":"表示方法
        //可以看到paramsArr 有4个参数
        //在OC中用c语言的方式定义方法必须要2个参数 id,__cmd,这里是2个隐藏参数
        //所以我们可以看到 前2个参数分别是 "@" ":"
        //因此从第三个开始才是私用方法的参数类型
        NSLog(@"参数类型:%@",paramsArr);
        char retType[512] = {};
        method_getReturnType(md, retType, 512);
        NSLog(@"返回值类型:%s",retType);
        
    }
    free(methods);
    
    FirstObj *fo = [[FirstObj alloc]init];
    //调用私有方法
    SEL sel = @selector(first_Method1:andParm:);
    //方法1
    [fo performSelector:sel withObject:@"wang" withObject:@"jian"];
    //方法2
    objc_msgSend(fo,sel,@"wang",@"bang");
    //方法3
//    IMP imp1 = [fo methodForSelector:sel];
    IMP imp1 = class_getMethodImplementation([FirstObj class], sel);
    void (* tmpFun)(id target,SEL sel,NSString *,NSString *) = (void *)imp1;
    tmpFun(fo,sel,@"wang",@"jian");
持续更新……

相关文章

  • iOS底层应用

    1、调用私有方法 已创建一个FirstObj 类,其中有一个方法 如何调用这个私有方法? 持续更新……

  • iOS 应用加载`dyld`篇

    iOS 应用加载dyld篇 前言 我们探索了iOS底层对象以及类的原理,对其有了大概的了解。那么iOS应用倒地是如...

  • Runloop

    Runloop 实现原理及应用iOS - RunLoop 底层源码详解及具体运用

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • iOS底层原理——浅谈RunLoop

    RunLoop应用:线程保活 线程保活、控制销毁 iOS-浅谈RunLoop8iOS底层原理总结 - RunLoo...

  • iOS底层--GCD应用

    手动目录GCD简介信号量信号量的理解信号量的使用信号量的代码实操信号量阻塞哪里的任务?栅栏函数dispatch_b...

  • iOS 底层 - performSelector:应用

    本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗...

  • iOS 底层探索 - 类

    iOS 底层探索系列iOS 底层探索 - alloc & initiOS 底层探索 - calloc 和 is...

  • iOS 底层探索 - 应用加载

    iOS 底层探索系列iOS 底层探索- alloc & initiOS 底层探索 - calloc 和 isaiO...

  • iOS 底层探索 - 消息转发

    iOS 底层探索系列iOS 底层探索- alloc & initiOS 底层探索 - calloc 和 isaiO...

网友评论

      本文标题:iOS底层应用

      本文链接:https://www.haomeiwen.com/subject/xngiuqtx.html