设为首页 加入收藏

TOP

Objective-C 通信模式(Communication Patterns)(二)
2014-11-23 17:49:46 来源: 作者: 【 】 浏览:36
Tags:Objective-C 通信 模式 Communication Patterns
retain这个发送者。另外,这属于单向消息传递――直接调用dataTaskWithURL:方法。如果按照这样的思路对照着流程图,我们会发现应该使用基于block消息传递的机制。

\

还有其它可选的机制吗?当然有了,苹果自己的NSURLConnection就是最好的例子。NSURLConnection在block问世之前就已经存在了,所以它并没有利用block进行消息传递,而是使用delegation机制。当block出现之后,苹果在NSURLConnection中添加了sendAsynchronousRequest:queue:completionHandler:方法(OSX 10.7 iOS 5),因此如果是简单的task,就不必在使用delegate了。


在OS X 10.9 和 iOS 7中,苹果引入了一个非常modern的API:NSURLSession,其中使用block当做消息传递机制(NSURLSession仍然有一个delegate,不过是用于别的目的)。


5、Target-Action

Target-Action用的最明显的一个地方就是button(按钮)。button除了需要发送一个click事件以外,并不需要再发送别的信息了。所以Target-Action在用户界面事件传递过程中,是最佳的选择。

\

如果taget已经明确指定了,那么action消息回直接发送给指定的对象。如果taget是nil,action消息会以冒泡的方式在响应链中查找一个能够处理该消息的对象。此时,我们拥有一种完全解耦的消息传递机制――发送者不需要知道接收者,以及其它一些信息。


Target-Action非常适用于用户界面中的事件。目前也没有其它合适的消息传递机制能够提供同样的功能。虽然notification最接近这种在发送者和接收者解耦关系,但是target-action可以用于响应链(responder chain)――只有一个对象获得action并作出响应,并且action可以在响应链中传递,直到遇到能够响应该action的对象。


四、小结

对于两个对象之间的消息传递使用何种通信模式有时的确有些模棱两可,但是仔细考虑琢磨,会发现其各自有的需求和功能特性。

文章中给出的决策流程图只是选择时候提供的参考依据,并非最终的答案,实践出真知!



注:本篇文章源自 objc.io 文章 Communication Patterns ,其全文翻译:iOS中消息的传递机制

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[Objective-C]OC 中对象属性的设.. 下一篇C指针原理(75)-GLIB

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: