美文网首页
运行时简单介绍

运行时简单介绍

作者: 闪电迷 | 来源:发表于2016-09-06 11:53 被阅读40次

runtime :

runtime:运行时,操作类的函数是以class_开头,操作成员变量的函数以ivar_开头。

在OC中,用类创建的对象被称为类的实例,任何一个类都是一个对象,类和类的实例并没有什么区别,任何对象都有一个isa指针。

isa:是一个class类型的指针,每个实例对象都有个isa指针,这个指针指向对象的类,而他指向的这个类也有一个isa指针,这个指针指向元类,在指向的这个元类里保存了类方法的列表,当类方法被调用时,先从类的本身查找方法的实现,如果没有,元类就会向该类的父类寻找被调用的这个方法。

元类也是一个类,也是一个对象,所以元类也有一个isa指针,这里的isa指针最终指向一个根元类,这个根元类也会有自己的isa指针,这个根元类的isa指针指向自己,形成了一个封闭的内循环。

runtime:见名之意,值得是一个程序在运行着的状态,也就是说一个程序正在运行或者被执行着的状态,就叫做runtime运行时。在一些编程语言中,把某些可以重用的程序或者实例打包或者重建成运行库,这些实例可以在他们运行的时候被连接或者被任何程序调用。

OC中的runtime,是一套比较纯底层的C语言API,属于一个C语言库包含了很多底层的C语言API。在我们平时编写的OC代码中,程序运行的时候,其实最终都是转成了runtime的C语言代码。

runtime的应用:1,利用运行时可以动态的创建一个类(比如KVO的底层实现,KVO中的派生类就是利用了运行时进行动态创建出来的)。

2,利用运行时可以动态的为某个类添加属性和方法,修改方法和属性的值。

3,利用运行时可以遍历一个类的所有成员变量和所有的方法,可以对类进行增、改、查的操作。

其实就是通过相关的方法来获取对象或者类的isa指针来实现的。

OC中运行时定义了集中重要的类型:

Class:定义OC的类。

Ivar:定义对象的实例变量,包括类型和名字。

Protocol:定义正式协议。

objc_property_t:定义属性。

Method :定义对象方法或类方法。

SEL:定义选择器。选择器是方法名的唯一标识符。

IMP:定义方法实现。

*相关的函数:

1,增加

-增加函数:class_addMethod

-增加实例变量:class_addIvar

-增加属性:可以增加属性,为属性增加setter和个getter方法或者@dynamic(@dynamic是相对于@synthesize的,它们用样用于修饰@property,用于生成对应的的getter和setter方法。但是@ dynamic表示这个成员变量的getter和setter方法并不是直接由编译器生成,而是手工生成或者运行时生成)

-增加协议protocol:class_addProtocol

2,查找:

-获取函数列表及每个函数的信息(函数指针函数名等):class_getClassMethod、method_getName

-获取属性列表及每个属性的信息:class_copyPropertyList、property_getName

-获取本身的信息,如类名等:class_getName class_getInstanceSize

-获取变量列表及变量信息:class_copyIvarList

-获取变量的值

3,替换:

-将实例替换成另一个类:object_setClass

-替换类方法的定义:class_replaceMethod

4,交换两个方法的实现:method_exchangeImplementations

设置一个方法的实现:method_setImplementation

相关文章

  • 运行时简单介绍

    runtime : runtime:运行时,操作类的函数是以class_开头,操作成员变量的函数以ivar_开头。...

  • OpenResty cosocket

    本文简单介绍cosocket在的实现原理。 一、Resume nginx的C运行时切换到Lua运行时的核心代码 n...

  • JVM常见面试题

    简单介绍下JVM运行时数据区 简单介绍下JVM常见异常 程序计数器 讲一讲方法区 JVM中对象的创建过程 对象的访...

  • Java内存模型JMM 高并发原子性可见性有序性简介

    JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 小编整理了一些java...

  • iOS-Main-运行时-获取对象的属性数组

    简单介绍一下Runtime-运行时: 运行时是一种面向对象的编程语言的运行环境,类似于java的虚拟机 OC最主要...

  • ES6 新特性之——import

    简单介绍不同规范 CommonJS规范和AMD规范运行时加载 上述代码:① 整体加载fs模块,生成一个fs对象② ...

  • objc_msgSend实现分析

    一、 runtime运行时 由于缓存的读取和写入涉及到了runtime的知识,在这里做简单的介绍。 1.1 run...

  • 无标题文章

    Android 6.0 运行时权限处理 标签(空格分隔): android 运行时权限介绍 Android 6.0...

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

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

  • Spring 系列篇之表达式语言(SpEL)

    Spring 表达式语言(SpEL)支持在运行时查询和操作对象。本篇文章我们来学习,如何使用SpEL,并简单介绍下...

网友评论

      本文标题:运行时简单介绍

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