运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行。例如[target doSomething];会被转化成objc)msgSend(target,@selector(doSomething))来执行。这篇博客会较为全面的来讲解下Runtime。(1)当我们需要使用Runtime的接口时,需要导入头文件:#import ,Runtime可以进行如下操作,在运行...
分类:
移动开发 时间:
2016-07-19 10:44:56
阅读次数:
243
一、简介 1、runtime是一套底层的纯C语言代码的API,我们所写的代码最终都被编译成了runtime的C语言代码,例如:[Class alloc],最终的结果是objc_msgsend(Class,@selector(alloc));利用强大的runtime,我们可以进行属性、方法、自动归档和 ...
分类:
移动开发 时间:
2016-07-09 07:03:50
阅读次数:
433
消息发送(Messaging) 8、以上便是runtime相关的一些数据结构,接下来我们回看一开始的疑问: objc_msgSend()函数在执行的过程中是如何找到对应的类,找到对应的方法实现的呢? 这就是消息发送(messaging)的处理过程了: (1)、对于上文的Class的数据结构的描述,官 ...
分类:
其他好文 时间:
2016-07-06 23:31:54
阅读次数:
315
Build Settings ->Apple LLVm 7.1-Preprocessing ->Enable strict checking of objc_msgSend Calls 值改为 NO ...
分类:
其他好文 时间:
2016-07-04 20:28:39
阅读次数:
160
译者前言 总是看到有人说用汇编实现objc_msgSend是为了速度快,当然这个不可否认。但是难道没有别的原因?于是就看到了这篇文章,遂翻译之!=。= 我自己的理解就是,用汇编实现,是为了应对不同的“Calling convention”,把函数调用前的栈和寄存器的参数、状态设置,交给编译器去处理。 ...
分类:
其他好文 时间:
2016-06-27 09:02:48
阅读次数:
232
Build Setting--> Apple LLVM 6.0 - Preprocessing--> Enable Strict Checking of objc_msgSend Calls 改为 NO 我使用了 objc_msgSend()函数,居然报错。百度找到了这个方法 ...
分类:
其他好文 时间:
2016-05-09 20:24:26
阅读次数:
124
一、runtime是一套底层的C语言库,编译器在编译object-C代码是,最终都转换成了runtime的C语言代码。 例如:[UIView alloc];在编译时会转换成objc_msgsend(UIView,@selector(alloc)); 每一个对象内都有一个isa指针,它指向对象所在的类 ...
分类:
其他好文 时间:
2016-05-03 17:41:37
阅读次数:
132
runtime的作用有四个:1.发送消息 2.交换方法 3.动态添加方法 4.给分类添加属性 5.字典转模型 作用一:发送消息 方法调用的本质,就是让对象发送消息。 objc_msgSend,只有对象才能发送消息,因此以objc开头. 使用消息机制前提,必须导入#import <objc/messa ...
分类:
其他好文 时间:
2016-04-17 13:10:50
阅读次数:
126
简介
Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如:
[receiver message];
// 底层运行时会被编译器转化为:
objc_msgSend(receiver, selector)
// 如果其还有参数比如:
[receiver message:(id)arg...];
// 底...
分类:
其他好文 时间:
2016-04-05 10:55:13
阅读次数:
370