iOS runTime运行时机制
ios runtime运行时机制。
运行时机制
不同级别的语言
-在计算机上只有0和1=>本身在计算机上执行的程序都是机器码,一堆二进制的指令!
-汇编语言
-c语言(被成为最接近汇编的一门语言)-面向过程的-一旦程序复杂之后,维护起来非常可怕!
-面向对象语言 c++/java/c#/oc
-脚本语言 javascript/python/perl/lua......
运行时是用 c++&c语言混编的,目标:在运行时动态的执行代码
-动态加载
-动态类型
-动态绑定
程序的从代码到能够执行的几个重要的阶段
-代码编写
-编译-生成可执行的伪机器码 clang
-链接-把所有需要的框架的伪机器码编练到一起生成真正能够执行机器码
时期:
-编译时
-链接时
-运行时
oc的特点,让所有的事情,尽可能的延后,很多检测工作,在编译的时候并不检查!
而在运行的时候,真正通过消息机制来实现方法的调用!
oc中的运行时机制,类似于执行oc代码的操作。
利用 clang 可以将 oc 代码转换成 c++,查看运行时机制的调用方法
$ clang -rewrite-objc main.m
通过运行时机制能够做到,在运行时能够动态的获取一个对象的完整信息,动态增加方法,动态添加属性等等。
主要应用场景:kvc本身就是利用运行时机制实现的!
1. 模型转字典的时候,可以动态获取对象的所有属性
模型转字典
2. 动态的修改一个方法的执行
例子:
1> 开发一个通用设备的应用程序!
2>开发初期,只针对iphone做了开发!
3>到后期需要接入 ipad 版本,而且所有程序都是纯代码写的!
界面布局通常是写在 loadview或者 viewdidload 方法中
如果需要接入ipad版本,一旦修改原有的 loadview 方法,就存在风险,如果用运行时机制,可以判断如果是 ipad 就不执行 loadview,而是使用一个替代方法,loadipadview
类似于函数的欺骗!
(asi中有)
3.在程序执行时,尤其网络应用,临时需要添加一个属性,利用运行时,就可以临时给对象添加一个属性!(sdwebimage里面有)
提示:一般运行时最重要的作用是开发oc用的!时,偶尔利用一下,可以将原本很繁重的工作简化!
但是:运行时的代码最好不要开放出来!在类的内部偶尔使用就行!
上一篇: WP7实例篇之优酷搜索器(1)
下一篇: 带你理解C语言中的汉诺塔公式