首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS开发 —— Runtime

这就是 Objective-C Runtime 系统存在的意义,它是整个Objc运行框架的一块基石。 Runtime基本是用C和汇编写的,可见苹果为了动态系统的高效而作出的努力。...苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。 消息传递 在很多语言中,比如C,调用一个方法其实就是跳到内存的某一点并开始执行一段代码。...具体的定义分析可以在我的另一篇 解释 Runtime 各种方法、属性的定义中去学习。 从这些定义可以看出发送一条消息也就 objc_msgSend 做了什么事。...这里叫 Fast ,只是为了区别下一步的转发机制。因为这一步不会创建任何新的对象,但下一步转发会创建一个 NSInvocation 对象,所以相对更快点。...利用 Objective-C 的 Runtime 特性,我们可以自己来对语言进行扩展,解决项目开发的一些设计和技术问题。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

iOS开发-Runtime详解

iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。...还有一些 NSObject 的方法可以从 Runtime 系统获取信息,允许对象进行自我检查。...---- 一些 Runtime 的术语的数据结构 要想全面了解 Runtime 机制,我们必须先了解 Runtime 的一些术语,他们都对应着数据结构。...重定向 消息转发机制执行前,Runtime 系统允许我们替换消息的接收者为其他对象。通过- (id)forwardingTargetForSelector:(SEL)aSelector方法。...虽然平时我们很少会考虑一句简单的调用方法,发送消息底层所做的复杂的操作,但深入理解 Runtime 系统的细节使得我们可以利用消息机制写出功能更强大的代码。

68570

iOS开发-Runtime详解

iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。...还有一些 NSObject 的方法可以从 Runtime 系统获取信息,允许对象进行自我检查。...---- 一些 Runtime 的术语的数据结构 要想全面了解 Runtime 机制,我们必须先了解 Runtime 的一些术语,他们都对应着数据结构。...重定向 消息转发机制执行前,Runtime 系统允许我们替换消息的接收者为其他对象。通过- (id)forwardingTargetForSelector:(SEL)aSelector方法。...虽然平时我们很少会考虑一句简单的调用方法,发送消息底层所做的复杂的操作,但深入理解 Runtime 系统的细节使得我们可以利用消息机制写出功能更强大的代码。

70190

Objective-Cruntime机制的应用

Objective-Cruntime机制的应用 一、初识runtime         Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应的方法的...因为OC的动态语言特性,我们可以通过一些手段,在程序运行时动态的更改对象的变量甚至方法,这就是我们所说的runtime机制。 二、你还有什么办法操作这样的变量么?         ...无论声明在头文件或是实现文件,无论类型是公开的还是私有的,只要声明了这个变量,系统就会为其分配空间,我们就可以通过runtime机制捕获到它,代码如下: #import "ViewController.h...五、让我看看你的方法吧         变量通过runtime机制我们可以取到和改变值,那么我们再大胆一点,试试那些私有的方法,首先我们在MyObject类添加一些方法,我们只实现,并不声明他们: @...六、动态的为类添加方法         这个runtime机制最强大的部分要到了,试想,如果我们可以动态的向类添加方法,那将是一件多么令人激动的事情,注意,这里是动态的添加,和类别的最大不同在于这种方式是运行时才决定是否添加方法的

38050

iOS runtime(理论篇)

2.方法的调用者会通过isa 指针来找到所属的类,然后在 cache 或者 methodLists 查找该方法,找得到就跳到对应的方法去执行。...3.如果在类没找到该方法,则通过super_class 往上一级超类查找。如果一直找到 NSObject 都没有找到该方法的话,可能就会触发到消息转发。...二. runtime 的术语的数据结构 上面讲的是执行过程里面有一些术语接下来大概介绍下。 1.SEL selector 是方法选择器,其实作用就和名字一样,日常生活,我们通过人名辨别谁是谁。...查找。...Runtime 系统会把被调用的方法存到 Cache ,如果一个方法被调用,那么它有可能今后还会被调用,下次查找的时候就会效率更高。就像计算机组成原理 CPU 绕过主存先访问 Cache 一样。

39850

RuntimeiOS开发的实际应用

,介绍目前在项目中runtime的具体使用,真切希望和各位同学探讨。...1 关联对象(AssociatedObject ) Catagory主要为已经存在的类(主要是系统类)扩展新的方法,关联对象是runtime在开发应用的最广泛,其主要用于为Catagory的对象增加属性...oc消息转发差不多就是这样的。...如果返回了一个函数签名,Runtime 就会创建一个 NSInvocation 对象并发送 -forwardInvocation: 消息给目标对象。...6 逆向开发 逆向开发主要集中在iOS越狱方面,逆向开发可以让我们在iOS开发打开另一扇门,对于大部门开发者来说很少接触这个领域,我也是在工作才接触到iOS的越狱,逆向开发的基础就是利用Method

93920

iOS RunTime之六:Category

runtime.h查看定义: typedef struct objc_category *Category; 同样也是一个 objc_category 结构体,定义如下: struct objc_category...; } OBJC2_UNAVAILABLE; 打开 objc 源代码,在objc-runtime-new.h...cls:要扩展的类对象,编译期间是不会定义的,而是在Runtime阶段通过name对应到对应的类对象。 instanceMethods:category中所有给类添加的实例方法的列表。...Category的原理 想深入了解 Category 的原理,请查看苹果的源码,这里是 objc4-680/ 我们知道,Objective-C 的运行是依赖 runtime,而 runtime 则依赖于...在这里分了两种情况进行处理:Category 的实例方法和属性被整合到主类;而类方法则被整合到元类。另外,对协议的处理比较特殊,Category 的协议被同时整合到了主类和元类

60220

iOS进阶之runtime作用

苹果和GNU各自维护一个开源的runtime版本,这两个版本之间都在努力的保持一致。...Objective-C 从三种不同的层级上与 Runtime 系统进行交互,分别是通过 Objective-C 源代码,通过 Foundation 框架的NSObject类定义的方法,通过对 runtime...大部分情况下你就只管写你的Objc代码就行,runtime 系统自动在幕后辛勤劳作着。 1、概念 RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。 ?...、ios进阶之传递消息 ?...如果我们将每个方法都直接加到内存当中去,但是几百年不用一次,这样就造成了浪费,所有采取动态添加 6.实现字典和模型的自动转换 3、详解: 一、动态交换方法 1.在自定义类DWExchangeTwoMethod.m

59790

iOS离屏渲染触发机制iOS离屏渲染触发机制

iOS系统离屏渲染利与弊 阅读需要约8分钟 前言 性能的优化相信是每一个APP工程师所追求的,而离屏渲染就是一个绕不开的知识点。...需要在额外的内存完成多图层组合绘制工作 GPU的离屏渲染 现在我对上图中增加一个圆角,而上图是由3个图层组成的,且图层渲染到画布后就会被销毁,导致GPU没办法一次性拿到所有图层来进行圆角切割....CPU的“离屏渲染” 在CoreAnimation 渲染流程Display流程的视图层绘制中提过,如果开启drawRect:方法就会触发CPU的“离屏渲染”,该方法里的所有代码都是在CPU中进行执行...,知道完成bitmap,转存到帧缓存区。...推荐阅读: 极客技术团队-关于iOS离屏渲染的深入研究

1.7K30

iOS runtime探究(二): 从runtime开始深入理解OC消息转发机制你要知道的runtime都在这里

,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制runtime开始: 理解OC的属性property 从runtime...开始: 实践Category添加属性与黑魔法method swizzling 从runtime开始: 深入weak实现机理 本文是系列文章的第二篇文章从runtime开始: 深入理解OC消息转发机制,主要从...runtime出发讲解OC的消息传递和消息转发机制。...OC里的消息传递采用动态绑定机制来决定具体调用哪个方法,OC的实例方法在转写为C语言后实际就是一个函数,但是OC并不是在编译期决定调用哪个函数,而是在运行期决定,因为编译期根本不能确定最终会调用哪个函数...这就涉及到前一篇博客讲解的内容iOS runtime探究(一): 从runtime开始: 理解面向对象的类到面向过程的结构体,这一篇博客详细讲解了OC的runtime是如何将面向对象的类映射为面向过程的结构体的

87570

iOS开发--runtime常用API

object_getClassName 获取对象的类名 object_getClass 获取对象的Class object_setClass 设置对象的Class object_getIvar 获取对象实例变量的值...object_setIvar 设置对象实例变量的值 object_getInstanceVariable 获取对象实例变量的值 (ARC无效,使用object_getIvar) object_setInstanceVariable...设置对象实例变量的值 (ARC无效,使用object_setIvar) 4.method_xxx 系列函数 method_系列函数关注于方法内部,如果方法的参数及返回值类型和方法的实现 method_getName...注册方法 sel_isEqual 判断方法是否相等 9.imp_xxx 系列函数 imp_implementationWithBlock 通过代码块创建IMP imp_getBlock 获取函数指针的代码块...imp_removeBlock 移除IMP的代码块

65940
领券