在每一个应用程序中都是包含着许多松散耦合的对象,它们之间采用何种通信模式进行交互?哪一种通信机制是最佳的实践?这些都是值得思考的问题(诚然其中没有明确的答案,但是也有一些约定俗成的用法习惯)。
通常情况下,我们可以采用的通信模式包括:KVO,Notifications,delegation,blocks,target-action。
一、了解Communication Patterns
1、KVO
KVO机制用于通知对象属性的变化。
消息接收者-->接收对象属性变化的消息;消息发送者-->对象属性发生变化。
消息接收者通过注册对消息发送者的监听,还必须知道消息发送者的生命期,用以解除对其的注册。
2、Notifications
Notifications(消息通知)用于在代码间广播消息。
Notifications发送的消息是任意的,你可以通过 userInfo 字典或者用 NSNotification 消息载体装载发送的消息。
通过Notifications,消息发送者和接收者可以互不认识,即在松耦合的代码间传递消息。此外,这是一种单向的通信方式,即接收方不能回复Notifications的消息通知。
3、Delegation(委托)
委托的作用:传值;传事件。
在委托协议中定义任意需要的委托方法处理两个特定对象之间的通信。发送者即委托者,在委托协议中定义委托方法,接收者即被委托者,实现委托协议中的委托方法。
4、Blocks