美文网首页移动开发
运行时机制-Runtime

运行时机制-Runtime

作者: 冲破茧缚 | 来源:发表于2015-08-27 20:24 被阅读2292次
  • Runtime是一套底层的C语言API(包含强大的C语言数据类型和函数)
  • OC代码都是基于Runtime实现的,即编写的OC代码最终都会转成Runtime的代码,例如:
    HCPerson *person = [HCPerson alloc] init];
    [person setAge:10]; //这句会转换成objc_msgSend(person,@selector(setAge:),20);
    

Runtime的作用

  • 获取类的私有变量
     #import <objc/runtime.h>
      // Ivar : 成员变量
      unsigned int count = 0;
      // 获得所有的成员变量
      Ivar *ivars = class_copyIvarList([HCPerson class], &count);
      for (int i = 0; i<count; i++) {
          // 取得i位置的成员变量
          Ivar ivar = ivars[i];
          const char *name = ivar_getName(ivar);
          const char *type = ivar_getTypeEncoding(ivar);
          NSLog(@"%d %s %s", i, name, type);
    
      }
    
  • 动态产生类,成员变量和方法
  • 动态修改类,成员变量和方法
  • 对换两个方法的实现(swizzle)
    • 例如:如果想要对iOS7以上和iOS7以下的图片进行适配,不同系统版本显示不同的图片,则可利用swizzle来实现
  • 实现方法:
    1.自定义UIImage的类imageWithName:方法,在该方法内进行系统版本号的判断,来显示不同的图片
    2.将imageWithName:方法和系统的imageNamed:方法进行对换,这样,一旦调用系统的imageNamed:方法,便会执行自定义的imageWithName:方法,进行判断,显示不同的图片
    /**
     *  只要分类被装载到内存中,就会调用1次
     */
    + (void)load
    {
        //获取类方法
        Method otherMehtod = class_getClassMethod(self, @selector(imageWithName:));
        Method originMehtod = class_getClassMethod(self, @selector(imageNamed:));
        // 交换2个方法的实现
        method_exchangeImplementations(otherMehtod, originMehtod);
    }

    + (UIImage *)imageWithName:(NSString *)name
    {
        BOOL iOS7 = [[UIDevice currentDevice].systemVersion floatValue] >= 7.0;
        UIImage *image = nil;
        if (iOS7) {
            NSString *newName = [name stringByAppendingString:@"_os7"];
            image = [UIImage imageWithName:newName];
        }

        if (image == nil) {
            image = [UIImage imageWithName:name];
        }
        return image;
    }

        ```

相关文章

  • iOS - RunTime的简单使用以及说明

    Runtime(消息机制) 都知道runtime就是运行时,OC也是运行时机制的,runtime说简单也简单,说难...

  • Runtime

    1、什么是Runtime(运行时-机制)? Runtime简称运行时,OC就是运行时机制,也就是在程序运行时的一些...

  • [iOS开发]一篇文章带你深入理解runtime

    一. runtime简介 runtime简称运行时,是一套底层的 C 语言 API。OC就是运行时机制,运行时机制...

  • IOS开发谈谈对Runtime 和 Runloop的理解

    Runtime Runtime简称运行时,OC就是运行时机制,也就是在运行时候的一些机制,其中最重要的事消息机制。...

  • IOSRunTime_方法交换

    RunTime_运行时详解 运行时机制: 消息发送机制: RunTime 运行时:苹果提供了一个API,属于C语言...

  • Runtime

    一、Runtime简介   Runtime 简称 运行时机制,也就是在运行时候的一些机制,其中最主要的是 消息机制...

  • iOS开发中的runtime机制知识的简单整理

    一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要...

  • RunTime-动态运行时

    RunTime简介: RunTime简称运行时。OC就是运行时机制,也就是运行时候的一些机制,其中最主要的就是消息...

  • Runtime学习与总结

    一 : Runtime简介 Runtime简称运行时,OC就是运行时机制,其中最主要的是消息机制 对于C语言,函数...

  • runtime的简单了解以及使用

    runTime简称运行时。OC就是运行时机制,其中最主要的是消息机制。 1、函数定义: 2、runtime的使用 ...

网友评论

    本文标题:运行时机制-Runtime

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