標籤:
【協議】(Protocol)
//協議是用來規範介面,實現對象間互動的一種機制。類似於JAVA中的介面,可以類比。
協議的許可權
@optional//可選的
@required//必須的
【代理】
一.代理的概念
【注】代理是實現兩個類的對象間通訊的一種機制。
【委託方】主動方 持有帶協議的id指標,可以使用協議。
【代理方】被動方 遵從協議,實現方法。
代理回調(反向傳值)
//當我們需要完成某個功能模組,但不知道使用功能模組的是哪個對象,通過協議,可以規定接收資料的對象通過哪個方法獲得資料。調用該方法的過程稱為【回調】
【Block】
【注】Block是管理程式中代碼塊的對象
//Block和函數指標很相似,可以記成將函數指標的*改成^
int (^block)(int, int);
【注】block是一個指向Block對象的指標
//block是一個Block對象指標
block = ^(int a, int b){
NSLog(@"這個代碼塊被使用了");
return a + b;
};
//這不是個函數,是一個代碼塊對象
NSLog(@"%d", block(4, 8));
【注】__block關鍵字,聲明一個變數,使變數在Block的內外都能使用。
【類別】
【問題】有的時候我們使用一個類(官方,第三方,自己建立的)會感歎,如果這個類再有一個什麼什麼樣的方法就更好用了,更適合當前程式。但是我們卻不方便修改原類。
【答】可以使用類別為類增補方法
一.認識類別(Category)
【注】類別是類的升級補丁,可以為類新增成員方法。另外類別也可以對類的方法分類管理。
【注】
1.類別中不能新增成員變數
2.在類別中添加的訊息,就如同添加到原類當中;對象的方法可以使用原類對象的成員變數。
3.使用類別須匯入類別標頭檔。
4.父類類別中的方法,子類也可以用。
【注】
1.如果類別中的方法很少,類別只用於當前檔案,可以直接將類別聲明到當前檔案中。
2.如果類別的實現和類別中方法的調用在同一檔案中,可以省略類別的介面部分
二.匿名類別
【注】類別的【仕途不順】的遠親。
【見CategoryDemo2】
三.前置聲明
【注】編寫程式時,不要在一個類的標頭檔中包含另一個類的標頭檔,以免彼此包含標頭檔發生【交叉包含】。
【注】A類使用B類,應在實現部分包含B類標頭檔。
【注】如果A類介面部分使用到B類名稱,應做B類的前置聲明
@class B;
@class 類名
iOS協議、代理、Block和回調、類別