黑马程序员技术交流社区
标题:
object-c多态的实现
[打印本页]
作者:
kingloveyy
时间:
2014-9-25 22:32
标题:
object-c多态的实现
多态是在runtime里面实现的,在编译的时候,compiler把所有class的定义都存放在class 实例对象里面,class实例对象包含了class的父class 实例对象的地址,class方法的select id和地址, class变量的偏移等。所有new出来的object都是从NSObject继承过来的,所以所有对象都自动包含了一个isa的指针,这个指针在调用alloc为object分配地址的时候被指向class对象的地址,在运行的时候,我们调用class 方法是通过给object发送消息[myobj method]这样的形式,但编译器会把这句话替换成id objc_msgSend(id theReceiver, SEL theSelector, ...) 第一个参数就是myobj,第二个参数是“method”这个字符串经过编码以后得到的唯一值,apple在runtime的时候查找method都是用selector来做的,这样效率会比字符串比较的效率要高。objc_msgSend这个函数的执行过程大概就是,从thereceiver(也就是myobj)里面得到isa的地址,这个地址指向前面讲到的编译器生成的class的object实例的地,然后比较方法的selector如果找到了,就知道了method的地址,就直接调用了。
作者:
wanyiyuan
时间:
2014-9-26 00:57
OC中的多台体现有哪些啊?能举例说明下不
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2