1.協(xié)議和代理的區(qū)別
<1>協(xié)議不是對象片拍,是OC的一種語法溉卓,用于聲明一組方法,約定調(diào)用者可以使用實現(xiàn)者的那些方法
協(xié)議不能被單獨實例化没陡,只能由類來明文聲明蹲蒲,并具體實現(xiàn)番甩。
協(xié)議的使用:
(1)指定對象需要實現(xiàn)的方法(必須的和非必須的)
(2)調(diào)用時,先判斷被調(diào)用者是否實現(xiàn)了某個方法
? ? ?if([self.delegate respondsToSelector:@selector(textColorChanged:)])
?{? [self.delegatetextColorChanged:self.textColor];?
}
<2>代理:是A對象指定B對象處理某些特定任務(wù)的設(shè)計模式届搁,這里的B對象就成為A對象的代理
在OC中協(xié)議是實現(xiàn)代理模式的一種方式
協(xié)議提供了面向接口編程的一種方式缘薛,使用協(xié)議,調(diào)用者只需要關(guān)心被調(diào)用者是否能做某些事卡睦,而不關(guān)心被調(diào)用者具體是誰宴胧。
這就是為什么代理對象總是被聲明成id,也就是說么翰,只要實現(xiàn)了協(xié)議牺汤,任何類都可以成為代理。
<3>小結(jié)
協(xié)議是Objective-C 的一種語法浩嫌,聲明了一套方法檐迟,而代理是一種設(shè)計模式,可以用協(xié)議來實現(xiàn)码耐。
使用協(xié)議要注意三個問題:
指定對象需要實現(xiàn)的方法追迟。
調(diào)用時,先判斷被調(diào)用者是否實現(xiàn)某方法骚腥。
聲明為代理的屬性敦间,需要定義為 weak。