zoukankan      html  css  js  c++  java
  • 运行时

    初识运行时


    1.什么是运行时(Runtime)

    • 1)Runtime System
      • 所有IOS程序的幕后支撑着都是运行时系统
      • IOS程序的方法调用都是靠运行时系统来支持的
    • 2)Runtime Library
      • 一套苹果提供的纯C语言库(API)
      • 运行时库的作用: 能为一个类动态添加成员变量、动态添加方法、动态修改方法实现
        动态交换两个方法的实现
      • 开发者编写的OC代码最终都转成了运行时代码。

    2.通过命令将OC代码转换成C语言代码

    clang -rewrite-objc xx.m

    3.简单示例,通过运行时机制来修改系统自带方法的实现

    #import <UIKit/UIKit.h>
    @interface UIImage (KL)
    + (UIImage *)kl_imageNamed:(NSString *)name;
    @end
    #import "UIImage+KL.h"
    #import <objc/runtime.h>
    
    @implementation UIImage (KL)
    
    /**
     *  将类装载进内存的时候调用一次
     */
    +(void)load{
        //利用运行时交换两个方法的实现
        Method originMethod=class_getClassMethod([UIImage class], @selector(imageNamed:));
        Method diyMethod=class_getClassMethod([UIImage class], @selector(kl_imageNamed:));
        method_exchangeImplementations(originMethod, diyMethod);
    }
    
    
    +(UIImage *)kl_imageNamed:(NSString *)name{
        CGFloat systemVersion = [[UIDevice currentDevice].systemVersion doubleValue];
        if (systemVersion >= 7.0) {
            name = [name stringByAppendingString:@"_os7"];
        }
        return [UIImage kl_imageNamed:name];
    }
  • 相关阅读:
    [mock open]PyUnit执行单元测试时使用字符串模拟文件对象
    bottle 0.5中的key-value数据库
    bottle模板中的替换
    返回不同值的小技巧
    带有参数的装饰器
    常用命令速查
    SQLAlchemy多线程下事务隔离机制详解
    Bancor 协议浅析
    Flask中 endpoint 解析
    pip 相关问题
  • 原文地址:https://www.cnblogs.com/coderkl/p/4320304.html
Copyright © 2011-2022 走看看