iOS RunTime理解笔记
iOS:RunTime(运行时) RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。 对于C语言,函数的调用在编译的时候会决定调用哪个函数。编译完成之后直接顺序执行,无任何异议。 OC的函数调用被称为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编译时,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。 例如: [obj makeText]; 其中obj是一个对象,makeText是一个函数名称。对于这样一个简单的调用。在编译时RunTime会将上述代码转化成 objc_msgSend(obj,@selector(makeText)); iOS中的obj都继承于NSObject @interface NSObject { Class isa OBJC_ISA_AVAILABILITY; } 在NSObjcet中存在一个Class的isa指针。然后我们看看Class: typedef struct objc_class *Class; struct objc_class { Class isa; // 指向metaclass Class super_class ; // 指向其父类 const char