美文网首页
iOS-runtime__运行时机制—概述

iOS-runtime__运行时机制—概述

作者: 守护浪漫的小香樟 | 来源:发表于2017-01-05 17:44 被阅读0次

Runtime的概念

1、Runtime是一套底层的C语言API(包含强大的C语言数据类型和函数)

2、OC代码都是基于Runtime实现的,即编写的OC代码最终都会转成Runtime的代码,

例如: 

 HCPerson *person = [HCPerson alloc] init]; 

[person setAge:10]; //这句会转换成

objc_msgSend(person,@selector(setAge:),20);

Runtime的作用

1、获取类的私有变量 

#import// 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);

}

2、动态产生类,成员变量和方法

3、动态修改类,成员变量和方法

4、对换两个方法的实现(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的概念 1、Runtime是一套底层的C语言API(包含强大的C语言数据类型和函数) 2、OC代码都...

  • Android:Handler 机制和原理?

    一、Handler机制概述 Handler机制也可以说是消息机制,Handler的运行时需要MessageQueu...

  • Java进阶 - JVM 内存管理机制探秘

    内容概述 JVM 运行时数据区概述 JVM 对象分配、布局与访问过程 GC机制与内存分配策略 主要以 HotSpo...

  • runtime实用面试,使用

    runtime概述 RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,...

  • Android - base - 运行时权限获取

    Android 6.0 引入的运行时权限机制 大纲 运行时权限机制简介 在程序运行时申请权限 #运行时权限机制简介...

  • RunTime

    前言 RunTime简称运行时机制,其实OC就是一种运行时机制(消息机制是运行时机制中最重要的机制) 消息机制:任...

  • runtime运行时初探(消息机制原理)

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

  • iOS运行时机制之Runtime

    简介 Runtime简称运行时机制。Objective-C就是运行时机制。也就是在代码编译后运行时的一些机制,其中...

  • runtime简介

    runtime简称运行时。OC就是运行时机制,也就是运行时的一些机制,其中最重要的就是消息机制。 对于C语言,函数...

  • runtime个人见解

    Runtime简称运行时,OC就是运行时机制,也就是运行时候的一些机制,其中最重要的就是 消息机制。 对于C语言,...

网友评论

      本文标题:iOS-runtime__运行时机制—概述

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