iOS傳值之block傳值 一

2021-06-29 04:26:57 字數 1464 閱讀 6134

ios4.0系統已開始支援block,在程式設計過程中,blocks被obj-c看成是物件,它封裝了一段**,這段**可以在任何時候執行。blocks可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。它和傳統的函式指標很類似,但是有區別:blocks是inline的,並且它對區域性變數是唯讀的。

下面是理論部分:

1、block的定義

1

//宣告和實現寫在一起,就像變數的宣告實現 int a = 10;

2int (^ablock)(int, int) = ^(int num1, int

num2) ;7//

宣告和實現分開,就像變數先宣告後實現 int a;a = 10;

8int (^cblock)(int,int

);9 cblock = ^(int num1,int

num2)

10;

其中,定義了乙個名字為ablock的blocks物件,並攜帶了相關資訊:

1、ablock 有兩個形式引數,分別為int型別;

2、ablock 的返回值為int 型別;

3、等式右邊就是blocks的具體實現;

4、^ 帶邊blocks宣告和實現的標示(關鍵字);

當然,你可以定義其他形式的block。e.g:無返回值,無形式引數等;

1

void (^bblock)() = ^()

2;

2、blocks 訪問許可權

blocks可以訪問區域性變數,但是不能修改。

1

int a = 10;2

int (^dblock)(int) = ^(int

num)

3;

此處不能修改的原因是在編譯期間確定的,編譯器編譯的時候把a的值複製到block作為乙個新變數(假設是a『 = 10),此時a'和a是沒有關係的。

這個地方就是函式中的值傳遞。如果要修改就要加關鍵字:__block或者static

1         __block int a = 7;2

int (^dblock)(int) = ^(int

num)

3;

3、block的呼叫

block呼叫就像呼叫函式一樣。e.g:

1

intc = ablock(10,10);

bblock();

4、block 應用

假設我們熟悉**遞值的話,對**我們可能又愛有恨!我們先建立模型a頁面 push b頁面,如果把a頁面的值傳遞到b頁面,屬性和單例傳值可以搞定!但是如果pop過程中把b頁面的值傳遞到a頁面,那就可以用單例或者**了!說到**,我們要先宣告協議,建立**,很是麻煩。常常我們傳遞乙個數值需要在兩個頁面間寫很多**,這些**改變頁面的整體順序,可讀性也打了折扣。所以,此時,block是一種優化方案!大家累了,休息下,預知後事如何,傾聽下回分解...

iOS如何實現傳值 block傳值

先來複習下如何定義乙個block 返回值 block名 引數列表 引數列表 如何使用block block名 引數 例如 block的寫法 定義block void block int int a block的使用 執行block中的 block 10 可以給同型別的block型別賦值 void b...

ios開發的block反向傳值

block 的反向傳值,一直以來都是copy,今天寫出來用來加深印象,也給一些懶哥們copy的方便些。不多說,直接上 import 第一步 第二個頁面.h typedef void secondvcblock nsstring inte ce secondviewcontroller uiviewc...

關於block介面傳值

不知道大家 對block的介面傳值了解的如何,我簡單的介紹一下吧。用block可以定義任意的 片段,可以將其像物件一樣傳入另乙個方法,是c級別的語法,和c中的函式指標很類似。進入正題吧,比如我們從第乙個viewcontroller push到第二個viewcontroller 第乙個viewcont...