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];

    }

  • 相关阅读:
    爬虫模块BeautifulSoup
    移动端开发概览【webview和touch事件】
    实战JS正则表达式
    相识HTML5 canvas
    运算符中的一些小技巧
    再看Ajax
    跨终端开发必备概念汇总
    谈谈工作,聊聊生活,想想以后
    页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理
    CSS3 Flexbox不迷路指南
  • 原文地址:https://www.cnblogs.com/oumygade/p/4641231.html
Copyright © 2011-2022 走看看