標籤:void main 標頭檔 標識 protoc 標識符 end ima ccf
李洪強iOS開發之Block和協議
OC語言BLOCK和協議
一、BOLCK
(一)簡介
BLOCK是什嗎?蘋果推薦的類型,效率高,在運行中儲存代碼。用來封裝和儲存代碼,有點像函數,BLOCK可以在任何時候執行。
BOLCK和函數的相似性:(1)可以儲存代碼(2)有傳回值(3)有形參(4)調用方式一樣。
標識符 ^
(二)基本使用
(1)定義BLOCK變數
Int (^SumBlock)(int,int);//有參數,傳回值類型為int
Void (^MyBlock)();//無參數,傳回值類型為空白
(2)利用block封裝代碼
(3)Block訪問外部變數
1)Block內部可以訪問外部變數;
2)預設情況下,Block內部不能修改外部的局部變數
3)給局部變數加上__block關鍵字,則這個局部變數可以在block內部進行修改。
(4)利用typedef定義block類型(和指向函數的指標很像)
Typedef int(^MyBlock)(int ,int);
以後就可以利用這種類型來定義block變數了。
MyBlock a,b;
a=^(int a,int b){return a-b;};
MyBlock b2=^(int n1,int n2){return n1*n2;};
二、Protocol(協議)
(一)簡介
1.Protocol:就一個用途,用來聲明一大堆的方法(不能聲明成員變數),不能寫實現。
2.只要某個類遵守了這個協議,就擁有了這個協議中的所有方法聲明。
3.只要父類遵守了某個協議,那麼子類也遵守。
4.Protocol聲明的方法可以讓任何類去實現,protocol就是協議。
5.OC不能繼承多個類(單繼承)但是能夠遵守多個協議。繼承(:),遵守協議(< >)
6.基協議:<NSObject>是基協議,是最根本最基本的協議,其中聲明了很多最基本的方法。
7.協議可以遵守協議,一個協議遵守了另一個協議,就可以擁有另一份協議中的方法聲明。
(二)基本使用
建立一個協議
遵守協議
完成協議中聲明的方法的實現
測試程式
1.協議的定義
@protocol 協議名稱 <NSObject>
//方法聲明列表
@end;
2.如何遵守協議
(1)類遵守協議
@protocol 類名:父類名 <協議名稱1,協議名稱2>
@end
(2)協議遵守協議
@protocol 協議名稱 <其他協議名稱>
@end;
3.協議方法聲明中的關鍵字
(1)required (預設)要求實現,若沒有實現則警告但不報錯
(2)Optional 不要求實現
4.定義變數時遵守協議的限制
類名<協議名稱> *變數名 NSObject<.Myprotocol> *obj;
Id <協議名稱> 變數名 id <.Myprotocol> obj1;
5.Property中聲明的屬性也可以做遵守協議的限制
@property (nonatomic ,strong ) 類名<協議名稱> *屬性名稱;
@property (nonatomic ,strong ) id<協議名稱> 屬性名稱;
6.補充知識:協議本身寫在.h標頭檔中,但也可以定義在任何地方。當這個協議只有這個類使用遵守時,一般把協議寫在這個類裡邊,當這個協議需要多個類去實現時,就寫在外邊單獨的檔案中。
李洪強iOS開發之Block和協議