runtime小谈

runtime 消息机制

使用runtime 的提前条件是 #import

SEL 是方法编号。IMP 是方法实现。

什么是isa ?

每个对象内部都有一个isa指针。这个指针指向它的真是类型,根据这个指针就能知道将来调那个类的方法。

(1).OC代码在运行时,也是转化为runtime方法,调用发一个方法就是发一个消息,创建一个对象 Person *p = [[Person alloc]init];发送的分别是alloc 和 init 消息.        消息机制的原理就是根据方法的编号SEL,去查找方法的实现。

eat 一个对象的吃方法是怎么调用的

对象方法保存在对象方法列表中。类方法保存在(保存在元类,(Meta Class)中)

1.oc在向一个对象发消息时,。runtime库会根据对象的isa 指针。找到对象对象的类或则起父类查找方法列表。

2.注册方法编号.

3.根据编号去查找对应的方法。

4.找到函数的实现地址,根据地址方法去调用去调用对应函数。

在工作中的实际用法.

1.系统原生的方法功能不能满足我们的需求的时候,我们可以在保持系统原来的方法功能的基础上添加额外的方法。

方法交换

比如  UIImage *image = [UIImage imageNamed:@"iamge"];

我们并不知道这个图片是否加载成功。

我们可以在这个方法写另外一个方法xximageNamed 然后在这个方法中判断,image是否为空。当我们要是用imaged 在这个类中把imageNamed的方法替换成我们自己的方法。class get method (self @selector(imageNamed))class get method (self @selector(xximageNamed))

class exchangeimpletention(前者,后者 )


(2).runtime用来字典转模型。


(3)动态的添加方法。

如果一个类的方法很多事,加载类到内存的时候也比较消耗资源,需要给每个方法生成映射表,可以使用采用动态的给类添加牧歌方法。



参考这篇文章。

http://www.cocoachina.com/ios/20170627/19628.html

你可能感兴趣的:(runtime小谈)