protocol 的本質(zhì)類似一個抽象類,這個聲明了一些純虛方法.并且沒有屬性,在java中,這個叫接口類,在c++中,這個叫抽象類. (在ruby中,跟它本質(zhì)不一樣,但是有點的類似,叫鴨子類型) 在編碼中,通過繼承協(xié)議,實現(xiàn)了協(xié)議中描述的這一套方法.
協(xié)議分為@require @option 兩種,@require是必須實現(xiàn)的,例如,我們繼承哺乳動物的一套功能. 呼吸,走路,進食,生育.功能中,必須實現(xiàn)呼吸和進食和生育,否則該生物將無法生存.
猜測:protocol在底層實現(xiàn)中應(yīng)該是C++的抽象類,比如有個類Class A 有一個方法 id<UITableViewDataSource> dataSource
只要ClassB 實現(xiàn)了協(xié)議(類似繼承抽象類)時候就能將instance B 賦值給dataSource了.(因為class B已經(jīng)繼承了UITableViewDataSource這個抽象類了,
Class B作為子類能賦值給基類屬性)
在iOS中,iOS使用委托這個設(shè)計方法,兩者結(jié)合.形成一個直觀的行為,Class A委托B實現(xiàn)Class A中的一些方法.這種設(shè)計使OC這一點變得非常靈活.但是,必須吐槽,如果只是單純實現(xiàn)一兩個協(xié)議,那很完美,在某些復(fù)雜的情況下,由于需要實現(xiàn)多個協(xié)議,使ViewController變得很臃腫并難以維護.
對于某些對數(shù)據(jù)依賴比較少的協(xié)議,可以從viewcongroller分離開來.