1. 程式人生 > >OC語言Block和協議

OC語言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標頭檔案中,但也可以定義在任何地方。當這個協議只有這個類使用遵守時,一般把協議寫在這個類裡邊,當這個協議需要多個類去實現時,就寫在外邊單獨的檔案中。