运行时

初识运行时


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];
}
posted @ 2015-02-16 08:24  coderkl  阅读(270)  评论(0编辑  收藏  举报