zoukankan      html  css  js  c++  java
  • iOS动态运行时方法

    在某些时候,程序可能需要根据获取的参数来决定调用的方法。

    要实现这样的功能,就需要使用到动态运行时方法了。

    首先需要定义好接口,以便调用。

    然后就是动态调用定义好的方法。

    这里有两种方法,

    第一种:

    // 有参数则需要加上冒号
    SEL sel = NSSelectorFromString(@"save:");
    
    MyObject obj = [MyObject new];
    
    [obj performSelector:sel withObject:@{@"1":@"one"}];

    使用第一种方法,程序会出现警告。

    第二种:(使用方法指针调用)

    MyObject obj = [MyObject new];
    
    SEL sel = NSSelectorFromString(@"save:");
    
    IMP imp = [obj methodForSelector:sel];
    
    /*
     * id 对象
     * SEL 对象的方法
     * id 方法的参数
     */    
    void (*func)(id, SEL, id) = (void *)imp;

    // 或者可以这样写

    // ((void (*)(id, SEL, id))[obj methodForSlector:sel])(obj, sel, @{@"1":@"one"}); func(manager, sel, @{
    @"1":@"one"});

    另外,id类型的熟练使用非常重要。

    NSString *param = @"{"mm":"iosqiao","yhm":"123456"}";
      id obj = [NSJSONSerialization
          JSONObjectWithData:[param dataUsingEncoding:NSUTF8StringEncoding]
                     options:0
                       error:nil];
      MyObject *manager = [MyObject new];
      if (!manager) {
        return;
      }
      SEL sel = NSSelectorFromString(@"saveStorage:");
      IMP imp = [manager methodForSelector:sel];
      void (*func)(id, SEL, id) = (void *)imp;
      func(manager, sel, obj);
  • 相关阅读:
    Log4J日志配置详解
    Linux:ssh端口转发详解
    Android数据存储五种方式总结
    Nginx学习记录
    简单通用JDBC辅助类封装
    PBR.理论
    PBR.工作流贴图
    不设置readable,读取图片数据
    直接打开指定的目录
    Compute Shader基础
  • 原文地址:https://www.cnblogs.com/hd1992/p/5648800.html
Copyright © 2011-2022 走看看