runtime浅谈(三)消息转发
来源:互联网 发布:天干地支最简单的算法 编辑:程序博客网 时间:2024/06/06 08:45
看了一下文章也进行了一些测试,关于消息转发做一小节。
<span style="font-size:14px;">- (id)forwardingTargetForSelector:(SEL)aSelector;- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;+ (NSMethodSignature *)instanceMethodSignatureForSelector:(SEL)aSelector;- (void)forwardInvocation:(NSInvocation *)anInvocation;- (void)doesNotRecognizeSelector:(SEL)aSelector;</span>
调用方法:
[someObj method1];//方式1[someObj performSelector:@selector(method1)];//方式2
如果 SomeObj没有实现 method1函数
runtime 将会调用
<span style="font-size:14px;">- (id)forwardingTargetForSelector:(SEL)aSelector{ if ([SomeObj respondsToSelector:aSelector]) { return SomeObj; } return nil;}</span>
如果 SomeObj 能够响应 aSelector,我们就将此消息转发到 SomeObj.
如果SomeObj 不能响应,函数返回了 nil
此时 runtime system将调用
<span style="font-size:14px;">- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{ NSMethodSignature *signature = [super methodSignatureForSelector:aSelector]; if (signature == nil) { signature = [OtherObj instanceMethodSignatureForSelector:aSelector]; } return signature;</span><pre name="code" class="objc"><span style="font-size:14px;">}</span>
如果父类没有实现此SEL,就询问 OtherObj 是否实现此 SEL
如果实现就返回NSMethodSignature
否则就返回 nil,此时 runtime system就会调用
<span style="font-size:14px;">- (void)doesNotRecognizeSelector:(SEL)aSelector{ NSLog(@"%@ %@",NSStringFromClass(self.class),NSStringFromSelector(_cmd));}</span><span style="font-size: 11px;"></span>
表示没有实现此函数,并抛出NSInvalidArgumentException 异常
可以在此函数中做程序最后的处理
说回去,如果OtherObj实现了此函数,则 runtime system 会调用
<span style="font-size:14px;">- (void)forwardInvocation:(NSInvocation *)anInvocation{ if ([OtherObj instancesRespondToSelector:[anInvocation selector]]) [anInvocation invokeWithTarget:otherObj]; else [super forwardInvocation:anInvocation];}</span>
0 0
- runtime浅谈(三)消息转发
- runtime(三)应用 消息转发
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- Objective-C runtime之消息转发机制(三)
- iOS运行时(runtime)探究三:消息转发
- Objective-C Runtime(三)消息转发机制
- Runtime系列(消息转发)
- Runtime之消息转发
- iOS runtime 消息转发
- runtime基础、消息转发
- Runtime消息转发机制
- Runtime消息转发机制
- 对android RIL层的思考
- 【甘道夫】基于Mahout0.9+CDH5.2运行分布式ItemCF推荐算法
- 思考的技术与艺术
- 面试中的易错题
- Java设计模式透析之 —— 组合(Composite)
- runtime浅谈(三)消息转发
- DllRegisterServer的调用失败,错误代码为0x80040200 (vista手动注册ocx dll问题)
- MVC3.0.关于@Html.BeginForm()提交,控制器无法获得Model
- 黑马程序员------集合框架(一)
- 1.7 用加法实现乘除减运算
- 检测手机号码有效性(2014)
- 湖南卫视邮件服务器架设方案
- JSP标签编程原理
- 人脸扫描(二)-人脸检测