代理
- 代理是一對(duì)一的關(guān)系.
- delegate 需要定義協(xié)議方法并且實(shí)現(xiàn)協(xié)議方法,會(huì)使代碼結(jié)構(gòu)變復(fù)雜.
- delegate 的執(zhí)行效率沒(méi)有Block的高.
Block
- 代碼結(jié)構(gòu)更加緊湊,不需要額外定義方法.
- 需要注意防止循環(huán)引用,使用__weak關(guān)鍵字修飾.
- 如果需要在塊中修改外部變量時(shí),需要對(duì)外部變量使用__block關(guān)鍵詞修飾.
NSNotifiction
- NSNotifiction是通知,是一對(duì)多的使用場(chǎng)景.
- 在某些情況下KVO和NSNotifiction是一樣的,都是狀態(tài)變化之后告知對(duì)方.
- NSNotifiction的特點(diǎn)是,就是需要 被觀察者先主動(dòng)發(fā)出通知,然后觀察者注冊(cè)監(jiān)聽(tīng)后再來(lái)進(jìn)行響應(yīng),比KVO多了發(fā)送通知的一步,但其優(yōu)點(diǎn)是監(jiān)聽(tīng)不局限于屬性的變化,還可以對(duì)多種多樣的狀態(tài) 變化進(jìn)行監(jiān)聽(tīng) ,監(jiān)聽(tīng)范圍廣,使用也更靈活.
KVO
- KVO就是cocoa框架實(shí)現(xiàn)的觀察者模式,一般同KVC搭配使用,通過(guò)KVO可以監(jiān)測(cè)一個(gè)值的變化:如view的高度變化 .
- 是一對(duì)多的關(guān)系,一個(gè)值的變化會(huì)通知所有的觀察者.
- 如果需要在塊中修改外部變量時(shí),需要對(duì)外部變量使用__block關(guān)鍵詞修飾.