Objective-C Block資料類型 @protocol關鍵字

來源:互聯網
上載者:User

標籤:

Block資料類型

Block封裝了一段代碼 可以在任何時候執行

Block可以作為函數參數或者函數的傳回值 而其本身又可以帶輸入參數或傳回值

蘋果官方建議盡量多用Block 在多線程 非同步任務 集合遍曆 集合排序 動畫轉場用的很多

定義Block變數

void (^myBlock) ();

int (^sunBlock) (int, int);

利用Block封裝代碼

^ {

  NSLog(@"==========");

};

^() {

  NSLog(@"=========");

};

^(int a, int b) {

  return a + b;

};

Block訪問外面變數

Block 內部可以訪問外面的變數

預設情況下 Block內部不能修改外面的局部變數

給局部變數加上__block關鍵字 這個局部變數就可以在Block內部修改

利用typedef定義Block類型

typedef int (^MyBlock) (int, int); //以後就可以利用MyBlock這種類型來定義Block變數

MyBlock block;

MyBlock b1, b2;

b1 = ^(int a, int b) {

  return a + b;

};

MyBlock b3 = ^(int a, int b) {

  return a + b;

};

@protocol關鍵字

可以用來聲明一大堆方法 (不能聲明成員變數)

只要某個類遵守了這個協議 就相當於擁有這個協議中的所有方法聲明

只要父類遵守了某個協議 就相當於子類也遵守了

協議的編寫格式

@protocol 協議名稱 <NSObject>

//方法聲明列表

@end

某個類遵守協議

@interface 類名 : 父類 <協議名稱1, ...>

@end

協議遵守協議

一個協議遵守了另外一個協議 就可以擁有另一個協議的所有方法聲明

@protocol 協議名稱 <協議名稱1, ...>

//方法聲明列表

@end

協議中方法聲明的關鍵字

@required 要求實現 不實現會有警告 (預設)

@optionnal 可選實現

基協議

NSObject是一個基類 任何其他類最終都要繼承它

還有一個NSObject基協議 聲明了許多最基本的方法 比如 description retain release 等等

建議每一個新的協議都遵守NSObject基協議

定義一個變數時 限制這個變數儲存的對象遵守某個協議

類名<協議名稱> *變數名;

id<協議名稱> 變數名;

NSObject<MyProtocol> *obj = [[NSObject alloc] init];

@property (nonatomic, strong) id<MyProtocol> obj;

如果沒有遵守對應的協議 編譯器就會報錯

Objective-C Block資料類型 @protocol關鍵字

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.