Onewang

iOS developer logging

生命不息,奋斗不止


主页

代理设计模式

NSProxy

什么是NSProxy:

NSProxy没有父类,是顶级类(根类),跟NSObject同等地位。 NSProxy和NSObject都实现了“NSObject Protocol”。 NSProxy设计时就是以“抽象类”设计的,专门为转发消息而生。

实现要求:

继承NSProxy的子类要实现自己的初始化方法,如“init”、“initWith”。 重写- forwardInvocation:和- methodSignatureForSelector:方法,完成消息转发

如此看来NSProxy确实更适合实现做为消息转发的代理类, 因为作为一个抽象类, NSProxy自身能够处理的方法极小(仅接口中定义的部分方法), 所以其它方法都能够按照设计的预期被转发到被代理的对象中.

最近的文章

深入理解OC方法缓存

objc_msgSend的消息分发的步骤: 判断receiver是否为nil,也就是objc_msgSend的第一个参数self,也就是要调用的哪个方法所属对象 从缓存里寻找,找到了则分发,否则 利用objc_class.mm中_class_lookupMethodAndLoadCache3方法去寻找selector 如果支持GC,忽略掉非GC环境的方法(retain等) 从本class的method list寻找selector,如果找到,填充到缓存中,并返回selector,...…

继续阅读
更早的文章

读书笔记

1、OC语言的起源:消息和函数的区别:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器来决定;如果代码中调用的函数是多态,那么在运行时就要按照“虚方法表”来查出到底应该执行那个函数实现;而采用消息结构的语言,不论是否多态,总是在运行时才会去查找索要执行的方法;实际上,编译器甚至不关心接受消息的对象时何种类型;接收消息的对象问题也要在运行时处理;其过程叫做“动态绑定”要点: OC为C语言添加了面向对象的特性,是其超集。OC使用动态绑定的消息结构,...…

继续阅读