ios运行时特性

object-c是一种运行时语言。
每当我们在程序开头写上#import XXXXX的时候,其实相当于我们把这个类整个地写到我们的程序当中了,而程序运行的开始时,一些语言就会去检查主程序里面的每一个变量,方法是否有问题。这样会造成程序的效率比较低下,而object—c这个语言的检查时机,是我们发送消息的时候,你甚至可以少写一个按钮的返回方法,当我们加载这个程序的时候并不会出现任何错误,只有我们点击这个按钮的时候才会报错。
在一种语言中我们写上static void methodS(){

。。。。
}
的时候,这些花括号里面的内容就会被编译的,二object却是在你确确实实运用到这个methods的时候才会对它进行编译。
runtime还有很多优势,比如它是开源的。在我们编写object程序时,runtime函数就会自动运作,把我们的程序翻译为机器语言。我们的每一个类都继承自NSObject类,这个类里面就有很多与runtime函数交互的方法。运行时系统有一个动态库,通过继承这个库里面的接口,我们也可以在自己的程序里面对runtime进行操作。
我们来看下objc_class的定义(就是类,不是对象)

structobjc_class{

Class isa  OBJC_ISA_AVAILABILITY;

#if !OBJC2

Classsuper _class OBJC2_UNAVAILABLE; //父类
constchar *name OBJC2_UNAVAILABLE; //类名
long version OBJC2_UNAVAILABLE; //类的版本信息,默认为0
long info OBJC2_UNAVAILABLE; // 类信息,供运行期使用的一些位标识
longinstance _size OBJC2_UNAVAILABLE; // 该类的实例变量大小
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; //该类的成员变量链表
struct objc_method_list *methodLists OBJC2_UNAVAILABLE; //方法定义的链表
structobjc_cache *cache OBJC2_UNAVAILABLE; // 方法缓存
structobjc_protocol_list *protocols OBJC2_UNAVAILABLE; // 协议链表
#endif

}OBJC2_UNAVAILABLE;
`

猜你喜欢

转载自blog.csdn.net/qq_36740186/article/details/77651303