Objective-C Runtime基本概念(一)

转载 2016年05月31日 14:55:04

Objective-C Runtime 是开源的

Objective-C 是开源的,任何时候你都能从 http://opensource.apple.com. 获取。事实上查看 Objective-C 源码是我理解它是如何工作的第一种方式,在这个问题上要比读苹果的文档要好。你可以下载适合 Mac OS X 10.6.2 的 objc4-437.1.tar.gz。


动态 vs 静态语言

Objective-C 是面相运行时的语言(runtime oriented language),就是说它会尽可能的把编译和链接时要执行的逻辑延迟到运行时。这就给了你很大的灵活性,你可以按需要把消息重定向给合适的对象,你甚 至可以交换方法的实现,等等(译注:在 Objective-C 中调用一个对象的方法可以看成向一个对象发送消息, Method Swizzling 具体实现可以参看 jrswizzle )。这就需要使用 runtime,runtime 可以做对象自省查看他们正在做的和不能做的(don't respond to)并且合适的分发消息(译注:感兴趣的同学可以查看 NSObject 类的 – forwardingTargetForSelector: 和 – forwardInvocation: 方法。P.S. 不是 NSObject 协议! )。如果我们和 C 这样的语言对比。在 C 里,你从 main() 方法开始写然后就是从上到下的写逻辑了并按你写代码的顺序执行程序。一个 C 的结构体不能转发函数执行请求到其他的目标上(other targets)

一、基本概念

  1. RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。

  2. 对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。

  3. OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。

  4. 只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

官网文档还提供关于传统和现代版本Runtime的说明

  1. In the legacy runtime, if you change the layout of instance variables in a class, you must recompile classes that inherit from it.

  2. In the modern runtime, if you change the layout of instance variables in a class, you do not have to recompile classes that inherit from it.In addition, the modern runtime supports instance variable synthesis for declared properties (see Declared Properties in The Objective-C Programming Language).

二、知晓OC的方法调用在Runtime中具体的实现

1.OC代码调用一个方法

1
[self.loginBt login];

2.在编译时RunTime会将上述代码转化成[发送消息]

1
objc_msgSend(self.loginB,@selector(login));

三、常见的作用

既然是“如来神掌”,简直可以无法无天啦,当街拦下一个人问道“这是马还是鹿啊?”,那人看是Runtime大人惧怕道“Runtime大人,您说是马就是马,是鹿就是鹿~”。Runtime大快“wow哈哈哈~,见你乖巧,我也不为难于你。你缺头驴是吧?,本大人现在造一头送于你,迁回家便是!喔~哈哈哈”。

呵呵,扯远了,回到Runtime作用上。无所不能的事情就不一一介绍了,梳理下较为可能用的几个地方:

1. 动态的添加对象的成员变量和方法

2. 动态交换两个方法的实现

3. 实现分类也可以添加属性

4. 实现NSCoding的自动归档和解档

5. 实现字典转模型的自动转换


相关文章推荐

【Objective-C】OC中集合基本概念和常用方法(NSSet)

一:集合的基本概念    Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个, 并且它也分为可变和不可变的集合对象(可变集...

【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)

一:字典的基本概念     Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合.正如,我们在字典里查找单词的定义一样. 通过...

【Objective-C】OC中字符串(NSString)的基本概念和常用处理方法

在Foundation框架中,提供了NNString类,用于处理字符串对象。在C语言中字符串在一对引号中表示。 OC是C语言的一种延展,换句话说,OC语言是建立在C语言的基础之上(C的基础之上添加了...

Objective-c 基本概念

1.Difference between shallow copy and deep copy? 2.What is advantage of categories? What is diffe...

Objective-C 基础知识之(十三):类目、延展、协议、代理等的基本概念

Category 类目、分类 可以为任何类添加方法。 类目的接口部分:声明添加的方法。 不能添加实例变量。   类目包含两部分:接口部分、实现部分。 类目中添加的方法属于类的一部分。 ...

【Objective-C】OC中自动释放池的基本概念和使用方法

自动释放池的基本概念      cocoa中有一个自动释放池(Autorelease Pool)的概念,顾名思义,它是可以存放一些实体的 集合,在这个自动释放池中的对象,是能够被自动释放的。NSO...

【Objective-C】OC中自定义对象的归档基本概念和使用方法(实现NSCoding协议)

平时使用中,我们通常需要通过对自定义对象进行归档处理,自定义对象要进行归档,需要去实现NSCoding协议. NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码...

【objective-c】面试题和基本概念【转帖,不保证正确性哦】[英文]

此份面试题包含40个题目,是现在网上能搜索到的一个比较热的一份,但是答案并不是很详细和完整,基本答案来着cocoaChina,和一些自己的补充。 1.Difference between shall...

Objective-C基础笔记(1)基本概念和第一个程序

一、基本概念Objective-C(简称OC)是iOS开发的核心语言,苹果公司在维护,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。C语言是面向过程的语...

Objective-C 编程基本概念

Objective-C 编程中的概念Cocoa 与 Cocoa Touch 中的基本概念学习 Objective-C 编程时,了解其核心概念、设计模式及 Cocoa 与 Cocoa Touch 的机制...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C Runtime基本概念(一)
举报原因:
原因补充:

(最多只允许输入30个字)