KVO,NSNotification走贪,delegate及block區(qū)別
KVO就是cocoa框架實(shí)現(xiàn)的觀察者模式佛猛,是一對多的關(guān)系,一個值的變化會通知所有的觀察者坠狡。一般同KVC搭配使用继找,通過KVO可以監(jiān)測一個值的變化,比如view的高度屬性變化逃沿。
NSNotification是通知婴渡,也是一對多的使用場景。在某些情況下凯亮,KVO和NSNotification是一樣的边臼,都是狀態(tài)變化之后告知對方。NSNotification的特點(diǎn)假消,就是需要被觀察者先主動發(fā)出通知柠并,然后觀察者注冊監(jiān)聽后再來進(jìn)行響應(yīng),比KVO多了發(fā)送通知的一步富拗,但是其優(yōu)點(diǎn)是監(jiān)聽不局限于屬性的變化臼予,還可以對多種多樣的狀態(tài)變化進(jìn)行監(jiān)聽,監(jiān)聽范圍廣啃沪,使用也更靈活粘拾。
delegate 是代理,就是我不想做的事情交給別人做创千。比如狗需要吃飯缰雇,就通過delegate通知主人,主人就會給他做飯签餐、盛飯寓涨、倒水,這些操作氯檐,這些狗都不需要關(guān)心戒良,只需要調(diào)用delegate(代理人)就可以了,由其他類完成所需要的操作冠摄。所以delegate是一對一關(guān)系糯崎。
block是delegate的另一種形式,是函數(shù)式編程的一種形式河泳。使用場景跟delegate一樣沃呢,相比delegate更靈活,而且代理的實(shí)現(xiàn)更直觀拆挥。
KVO一般的使用場景是數(shù)據(jù)薄霜,需求是數(shù)據(jù)變化某抓,比如股票價格變化,我們一般使用KVO(觀察者模式)惰瓜。delegate一般的使用場景是行為否副,需求是需要別人幫我做一件事情,比如買賣股票崎坊,我們一般使用delegate备禀。Notification一般是進(jìn)行全局通知,比如利好消息一出奈揍,通知大家去買入曲尸。delegate是強(qiáng)關(guān)聯(lián),就是委托和代理雙方互相知道男翰,你委托別人買股票你就需要知道經(jīng)紀(jì)人另患,經(jīng)紀(jì)人也不要知道自己的顧客。Notification是弱關(guān)聯(lián)奏篙,利好消息發(fā)出柴淘,你不需要知道是誰發(fā)的也可以做出相應(yīng)的反應(yīng),同理發(fā)消息的人也不需要知道接收的人也可以正常發(fā)出消息秘通。