KVO
觀察者模式,一般同KVC搭配使用楷怒,通過KVO可以監(jiān)測一個值的變化蛋勺。是一對多的關(guān)系,一個值的變化會通知所有的觀察者鸠删。
NSNotification
通知抱完,也是一對多的使用場景。在某些情況下刃泡,KVO和NSNotification是一樣的巧娱,都是狀態(tài)變化之后告知對方。NSNotification的特點烘贴,就是需要被觀察者先主動發(fā)出通知禁添,然后觀察者注冊監(jiān)聽后再來進(jìn)行響應(yīng),比KVO多了發(fā)送通知的一步桨踪,但是其優(yōu)點是監(jiān)聽不局限于屬性的變化老翘,還可以對多種多樣的狀態(tài)變化進(jìn)行監(jiān)聽,監(jiān)聽范圍廣锻离,使用也更靈活铺峭。
delegate
代理,就是我不想做的事情交給別人做汽纠。所以delegate是一對一關(guān)系卫键。
block
delegate的另一種形式,是函數(shù)式編程的一種形式虱朵。使用場景跟delegate一樣莉炉,相比delegate更靈活啤呼,而且代理的實現(xiàn)更直觀。
KVO一般的使用場景是數(shù)據(jù)呢袱,需求是數(shù)據(jù)變化,比如屬性值的變化翅敌,我們一般使用KVO(觀察者模式)羞福。
delegate一般的使用場景是行為,需求是需要別人幫我做一件事情蚯涮,比如買賣股票治专,我們一般使用delegate。delegate是強(qiáng)關(guān)聯(lián)遭顶,就是委托和代理雙方互相知道张峰,你委托別人買股票你就需要知道經(jīng)紀(jì)人,經(jīng)紀(jì)人也不要知道自己的顧客棒旗。
Notification一般是進(jìn)行全局通知喘批,比如利好消息一出,通知大家去買入铣揉。Notification是弱關(guān)聯(lián)饶深,利好消息發(fā)出,你不需要知道是誰發(fā)的也可以做出相應(yīng)的反應(yīng)逛拱,同理發(fā)消息的人也不需要知道接收的人也可以正常發(fā)出消息敌厘。