之前想了解runtime的先关知识,无意中发现了消息转发机制,就自己动手写了些。
如上图所示:在oc中调用方法时,本类及父类找不到此方法时,有如下步骤。
要重写一下方法。
第一步:尝试动态方法解析
-
voiddynamicMethod(idself,SEL_cmd)
-
{
-
printf("SEL%sdidnotexist\n",sel_getName(_cmd));
-
}
-
-
+(BOOL)resolveInstanceMethod:(SEL)aSEL
-
{
-
-
class_addMethod([selfclass],aSEL,(IMP)dynamicMethod,"v@:");
-
returnYES;
-
}
第二步:如果第一步返回NO,则进行【尝试快速消息转发】
-
-(id)forwardingTargetForSelector:(SEL)aSelector
-
{
-
Proxy*p=[[Proxyalloc]init];
-
if([prespondsToSelector:aSelector])
-
{
-
returnp;
-
}
-
returnnil;
-
}
第三步:如果第第二步返回nil,则进行【尝试标准消息转发】
-
//检测此消息是否有效。
-
-(NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector
-
{
-
return[ProxyinstanceMethodSignatureForSelector:aSelector];
-
}
-
-
-
-(void)forwardInvocation:(NSInvocation*)anInvocation
-
{
-
SELname=[anInvocationselector];
-
NSLog(@">>forwardInvocationforselector%@",NSStringFromSelector(name));
-
Proxy*proxy=[[Proxyalloc]init];
-
if([proxyrespondsToSelector:name]){
-
[anInvocationinvokeWithTarget:proxy];
-
}
-
else{
-
[superforwardInvocation:anInvocation];
-
}
-
}
注:
调用函数:
-
[fooperformSelector:@selector(MissMethod)];
Proxy类
-
@implementationProxy
-
-
-(void)MissMethod
-
{
-
NSLog(@">>MissMethod()calledinProxy.");
-
}
-
-
@end
分享到:
相关推荐
深入了解oc中的消息转发机制是很有必要的,希望对你有所帮助
最近研究了一下iOS的消息转发机制,特此做记录,用一个真实的例子让自己理解的更深刻。这个例子会列举方法没有实现而导致崩溃的避免措施,。息的转发分为三步,通过这个例子看一下在每一步的转发中如何避免因为方法...
ios runtime 消息转发机制。主要描述runtime消息发送的三次补救机会。
ios消息转发机制,用来实现将一个类不能够实现的方法转发出去。
iOS 基于消息转发机制实现弱引用计时器
Objective-C中消息转发机制demo
Runtime_消息转发机制 举例人这个类实现猫的这个类的方法
iOS runtime的基本应用例子(runtime黑魔法,IMP指针, 消息转发机制) 注释很全, 简单易懂的小demo
http://www.jianshu.com/p/35761c97f12e
iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发).zip,iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发)
引入Spray and Wait机制,设计消息传输策略,对消息发送顺序、缓存清除机制以及消息转发机制进行优化,以确保携带消息节点在有限通信时间内向邻居节点转发更多的消息,节点相遇后,判断缓存中过期消息的目标节点是否为...
延迟容忍网络中的转发机制因节点自私性行为会造成中继节点拒绝转发,并导致消息投递率降低、传输时延增长等性能下降问题。为此,基于节点行为分析,提出一种自私性延迟容忍网络消息转发机制。该机制以多副本传输为...
由于现有的机会网络转发机制不能完全适应社会网络中基于社交关系的判断与分析,为此通过建立社交关系的分类,构建机会网络中的社会...通过仿真实验,所提出的转发机制有效地降低了网络中的消息副本数和降低了路由开销。
针对机会移动网络数据转发机制进行了深入研究。机会移动传感网络以“存储—携带—转发”的方式实现节点间通信,需要减少网络中消息总的副本数量,提高消息传递成功率。基于简单实用的原则,提出结合消息副本率和与...
针对如何在自私性移动机会网络中进行高效的数据转发,提出了基于节点社会合作度的转发机制。该算法通过研究用户运动的社会特性,利用经济学中的节点信任等级的方式解决网络中存在自私节点的问题,并通过综合评价节点...
机会网络中基于信息可利用性的转发机制,吴嘉,陈志刚,机会网络中现有的基于数据转发机制的路由算法,不能较好的对社会关系中信息的可利用性进行选择与传递。通过对社交关系的分类及信
高性能路由器中的并行包转发机制研究.pdf
绿色路由器的低功耗FIS转发机制及其能耗分析.pdf
基于动态阶梯社会性的DTN数据转发机制的研究,岳畅畅,谢东亮,为了在链路间歇中断的时延容忍网络(DTN)提高消息递送成功率并降低网络开销,当前基于相遇预测的DTN路由利用社会网络中的中心性、
用户向服务器发送了一次HTTP请求,该请求肯能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的。根据转发方式的不同,可以区分为直接请求转发...