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