1.協議和代理的區別
<1>協議不是對象,是OC的一種語法,用于聲明一組方法,約定調用者可以使用實現者的那些方法
協議不能被單獨實例化,只能由類來明文聲明,并具體實現。
協議的使用:
(1)指定對象需要實現的方法(必須的和非必須的)
(2)調用時,先判斷被調用者是否實現了某個方法
? ? ?if([self.delegate respondsToSelector:@selector(textColorChanged:)])
?{? [self.delegatetextColorChanged:self.textColor];?
}
<2>代理:是A對象指定B對象處理某些特定任務的設計模式,這里的B對象就成為A對象的代理
在OC中協議是實現代理模式的一種方式
協議提供了面向接口編程的一種方式,使用協議,調用者只需要關心被調用者是否能做某些事,而不關心被調用者具體是誰。
這就是為什么代理對象總是被聲明成id,也就是說,只要實現了協議,任何類都可以成為代理。
<3>小結
協議是Objective-C 的一種語法,聲明了一套方法,而代理是一種設計模式,可以用協議來實現。
使用協議要注意三個問題:
指定對象需要實現的方法。
調用時,先判斷被調用者是否實現某方法。
聲明為代理的屬性,需要定義為 weak。