轉載: http://www.cnblogs.com/Camier-myNiuer/archive/2013/03/24/Camier.html
今天晚上才終於弄明白了協議,委託。 實際上協議和委託是分不開的。有協議就必須有委託。自己寫好了協議(相當於介面),委託誰去實現呢。所以就必須有一個類去實現他。 那麼這個類就成為了 委派物件。
話說,我們為什麼要弄一個協議出來呢。我說說我的見解吧。 類A自己需要完成一個具體功能,但是這個功能的一些零組件在B類裡面,所以A類就寫一個協議,裡面寫上幾個方法。然後讓B類實現協議,即在@interface XXX <協議名>,然後在B類裡面指定這個協議的一個委派物件。即 a(A類的一個對象).delegate = self; self即指的是本類(B)。那麼 接下來要做的事情就是,在B類中去實現這個協議裡面的幾個方法。 現在呢,這個功能已經在B類裡面實現好了,那麼A類現在就能直接用了。A類具體怎樣調用這個協議裡面的方法呢?
我們應在A.h裡面寫一個 該id<協議名>類型的執行個體 或者 @property(nonatomic,assign) id <協議名>DDD;然後在去調用該協議中的方法。 我在這裡插一句話,DDD 實際上指的是 實現該協議的類的對象。如果你聽的有點兒糊塗,我給你換一句話,此屬性用於指定實現該協議的對象。 需要理解的就是這麼一點兒。下面寫寫協議具體的文法
聲明協議:
@protocol 協議名
方法1;
方法2;
......
@end
舉個例子:
@end
實現該協議
哪個類實現,就在那個類的@interface 類名 旁邊的角括弧裡面寫上要實現的協議名。即<協議名>。
舉個例子:
在該類裡面如何指定委派物件呢,把聲明協議的那個類,寫一個對象。然後“.delegate” ,指定一個委派物件。
舉個例子:
指定了委派物件後,在該類裡面就要實現該協議裡面的方法了。
舉個例子:
在該類裡面已經實現了功能,那麼現在就要回到原來的那個類(即寫協議的那個類)裡面了,來實現協議方法。
怎樣實現呢,前面已經說過了,
首先,需要聲明一個id類型的執行個體變數或者聲明一個屬性,但是該id類型的變數聲明有些特殊,因為需要在id之後加上用角括弧括起來的該協議名,這個我們大家應該能想通。
舉個例子:
聲明一個執行個體變數:
聲明一個屬性:
需要在.m裡面
其次,再調用該方法。
舉個例子:
或者
最終,就大功告成了。相信大家看完之後有些累了,建議再重新看一遍。就會理解協議與委託。
本人學術淺薄,若有錯誤,請不惜賜教。