Runtime是一个用C语言和汇编语言编写的动态库,它是一个将C语言转化为面向对象语言的扩展,这里的面向对象语言就是Objective-C,它将OC和C紧密相连,实现了在运行时动态修改 【函数标识与函数过程真正内容之间的关联】。
因为Objc是一门动态语言,所以它总是想办法把一些决定工作从编译连接推迟到运行时。也就是说只有编译器是不够的,还需要一个运行时系统 (runtime system) 来执行编译后的代码。这就是 Objective-C Runtime 系统存在的意义,它是整个 Objc 运行框架的一块基石。
runtime是一个c和汇编语言编写的动态库,它就像一个小小的系统,将OC 和C紧密关联,这个系统主要做两件事:
1、封装c语言的结构体和函数,让开发者在运行时创建、检查或者修改类、对象和方法等等。
2、传递消息,找出方法的最终执行代码。
http://yulingtianxia.com/blog/2014/11/05/objective-c-runtime/
OC的动态性
即运行时再决定对象的类型。这类动态特性在日常应用中非常常见,简单来说就是id类型。id类型就是同样的对象类,任何对象都可以被id指针所指,其类型需要等到运行时才能决定,在编译时id就是一个通用类型。
动态绑定
概念: 基于对象是在运行时再决定它的类型,在某个实例对象被确定后,其类型便被确定了。那么该对象对应的属性和响应的消息就被完全确定,这就是动态绑定。
作用:在运行时,当一个实例确定所属类型后,我们可以动态的为这个实例进行属性或者方法上的扩充,在运行时才为这个实例所属类加入新的实现。
动态加载
最经典的例子就是2x图和3x的加载
为何c语言中的void*需要强制转换而oc中的id不需要
因为,oc中id只有在运行时才能确定id的类型,而在编译期id可以指向任何类的实例,而c语言不存在这个动态性,一切都是在编译期决定的,所以当你将一个void*赋值给一个已知类型的指针时,必须进行类型转换
网友评论