ios4.0系統已開始支援block,在程式設計過程中,blocks被obj-c看成是物件,它封裝了一段**,這段**可以在任何時候執行。blocks可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。它和傳統的函式指標很類似,但是有區別:blocks是inline的,並且它對區域性變數是唯讀的。
下面是理論部分:
1、block的定義
1其中,定義了乙個名字為ablock的blocks物件,並攜帶了相關資訊://宣告和實現寫在一起,就像變數的宣告實現 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;
1、ablock 有兩個形式引數,分別為int型別;
2、ablock 的返回值為int 型別;
3、等式右邊就是blocks的具體實現;
4、^ 帶邊blocks宣告和實現的標示(關鍵字);
當然,你可以定義其他形式的block。e.g:無返回值,無形式引數等;
12、blocks 訪問許可權void (^bblock)() = ^()
2;
blocks可以訪問區域性變數,但是不能修改。
1此處不能修改的原因是在編譯期間確定的,編譯器編譯的時候把a的值複製到block作為乙個新變數(假設是a『 = 10),此時a'和a是沒有關係的。int a = 10;2
int (^dblock)(int) = ^(int
num)
3;
這個地方就是函式中的值傳遞。如果要修改就要加關鍵字:__block或者static
1 __block int a = 7;23、block的呼叫int (^dblock)(int) = ^(int
num)
3;
block呼叫就像呼叫函式一樣。e.g:
1
int
c = 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...