KVO
KVO提供了這樣一種機制:當對象中的某個屬性值發(fā)生了改變堕阔,可以對這些值的觀察者做出通知棍厂。
兩個要求,首先超陆,接收者(會接收到值發(fā)生改變的消息)必須知道發(fā)送者(值將發(fā)生改變的那個對象)牺弹。另外,接收者同樣還需要知道發(fā)送者的生命周期时呀,因為在銷毀發(fā)送者對象之前张漂,需要取消觀察者的注冊。
Notification(一對多谨娜,單向)
在不相關的兩部分代碼中要想進行消息傳遞航攒,通知(notifacation)是非常好的一種機制,它可以對消息進行廣播趴梢。特別是想要傳遞豐富的信息屎债,并且不一定指望有誰對此消息關心。 這種消息傳遞機制是單向的垢油,作為接收者是不可以回復消息的
Delegation(自定義任何方法)
delegation允許我們定制某個對象的行為盆驹,并且可以收到某些確定的事件。elegate協(xié)議可以定義任意的方法滩愁,因此你可以準確的定義出你所需要的類型躯喇。你可以用函數(shù)參數(shù)的形式來處理消息內容,delegate還可以通過返回值的形式給發(fā)送者做出回應硝枉。如果只需要在相對接近的兩個模塊之間進行消息傳遞廉丽,那么Delegation是一種非常靈活和直接方式。
Block (一次性并且能打破retain環(huán))
一般情況下妻味,block可以滿足用delegation實現(xiàn)的消息傳遞機制.當不考慮使用block時正压,一般主要是考慮到block極易引起retain環(huán)。如果發(fā)送者需要reatain block责球,而又不能確保這個引用什么時候被nil焦履,這樣就會發(fā)生潛在的retain環(huán)拓劝。
發(fā)送的消息屬于一次性的(具體到某個方法的調用),由于這樣可以打破潛在的retain環(huán)嘉裤,那么使用block是非常不錯的選擇
Target-Action(一對一郑临,響應鏈)
arget-Action主要被用于響應用戶界面事件時所需要傳遞的消息中.Target-Action在消息的發(fā)送者和接收者之間建立了一個非常松散耦合。消息的接收者不知道發(fā)送者屑宠,甚至消息的發(fā)送者不需要預先知道消息的接收者厢洞。