zoukankan      html  css  js  c++  java
  • iOS 利用runtime调用方法

    利用runtime调用方法,可实现不做import,直接调用

    // Build Setting--> Apple LLVM 6.0 - Preprocessing--> Enable Strict Checking of objc_msgSend Calls  改为 NO

    - (void)execFunction2

    {

        NSString *functionName = @"runWithFriend:";

        NSString *className = @"People";

        NSString *friend = @"妹子";

        

        SEL runAction = NSSelectorFromString(functionName);

        Class peopleClass = NSClassFromString(className);

        

        objc_msgSend(peopleClass, runAction, friend);

    }

     

    static NSMutableDictionary *cache;

    - (void)execFunction

    {

        if (!cache)

            cache = [NSMutableDictionary dictionary];

        

        NSString *functionName = @"runWithFriend:";

        NSString *className = @"People";

        NSString *friend = @"妹子";

        

        SEL runAction = NSSelectorFromString(functionName);

        Class peopleClass = NSClassFromString(className);

        

        NSMethodSignature *runSig;

        if ([cache objectForKey:functionName]) {

            runSig = [cache objectForKey:functionName];

        } else {

        // methodSignatureForSelector:比较耗费性能, 所以最好把签名缓存起来

            runSig = [peopleClass methodSignatureForSelector:runAction];

            [cache setObject:runSig forKey:functionName];

        }

     

        NSInvocation *inv = [NSInvocation invocationWithMethodSignature:runSig];

        

        [inv setSelector:runAction];

        [inv setArgument:&friend atIndex:2];

        [inv invokeWithTarget:peopleClass];

    }

  • 相关阅读:
    elk2
    elk
    skywalking学习ppt
    Spring Boot]SpringBoot四大神器之Actuator
    黑马程序员spring data jpa 2019年第一版本
    css总结7:盒子模型理解
    css总结5:px、em、rem区别介绍
    css总结4:input 去掉外边框,placeholder的字体颜色、字号
    css总结3:Flex 布局教程:Flex-demos(转)
    css总结2:Flex 布局教程:Flex 语法(转)
  • 原文地址:https://www.cnblogs.com/oumygade/p/4641231.html
Copyright © 2011-2022 走看看