People Lack Willpower,Rather Than Strength!
1.protocol
-
概念:
- 在寫java的時候都會有接口interface這個概念,接口就是一堆方法的聲明沒有實現(xiàn),而在OC里面Interface是一個類的頭文件的聲明,并不是真正意義上的接口的意思,在OC中接口是由一個叫做協(xié)議的protocol來實現(xiàn)的
- protocol它可以聲明一些必須實現(xiàn)的方法和選擇實現(xiàn) 的方法。這個和java是完全不同的
-
注意:
- 一個類可以遵守1個或多個協(xié)議
- 任何類只要遵守了Protocol,就相當于擁有了Protocol的所有方法聲明.
- 就一個用途,用來聲明一大堆的方法(不能聲明成員變量),不能寫實現(xiàn).
- 只要父類遵守了某個協(xié)議,那么子類也遵守.
- OC不能繼承多個類(單繼承)但是能夠遵守多個協(xié)議。繼承(:),遵守協(xié)議(< >)
- 協(xié)議可以遵守協(xié)議,一個協(xié)議遵守了另一個協(xié)議,就可以擁有另一份協(xié)議中的方法聲明
-
Protocol和inheritance區(qū)別
- 繼承之后默認就有實現(xiàn), 而protocol只有聲明沒有實現(xiàn)
- 相同類型的類可以使用繼承, 但是不同類型的類只能使用protocol
- protocol可以用于存儲方法的聲明, 可以將多個類中共同的方法抽取出來, 以后讓這些類遵守協(xié)議即可
-
基協(xié)議
- NSObject協(xié)議是基協(xié)議,最根本最基本的協(xié)議,NSObject類也要遵守他
- NSObject協(xié)議中聲明很多最基本的方法
- description
- retain
- release
-
protocol中的方法修飾符:用于程序員之間的交流,不是強制性要求
- @required:這個方法必須要實現(xiàn)(若不實現(xiàn),編譯器會發(fā)出警告)
- @optional:這個方法不一定要實現(xiàn)
2.protocol用途
- 1.類型限制
- 如何在代碼中要求對象必須具備這些行為?
- 數(shù)據(jù)類型<協(xié)議名稱> 變量名
// 如果沒有遵守協(xié)議則會報警告 id<WifeCondition> wife = [[Person alloc] init];
- 如何在代碼中要求對象必須具備這些行為?
- 2.代理模式
- 應用場景:
- 當對象A發(fā)生了一些行為,想告知對象B(讓對象B成為對象A的代理對象) - 對象B想監(jiān)聽對象A的一些行為(讓對象B成為對象A的代理對象) - 當對象A無法處理某些行為的時候,想讓對象B幫忙處理(讓對象B成為對象A的代理對象)