Dear All 這次我們來學(xué)習(xí)block知識(shí) 喜爷,廢話不說 件豌、讓我們直奔主題
block也是一個(gè)指針掰伸,保存的是一段代碼塊在內(nèi)存中的空間 (棧內(nèi)存)
下面聲明一個(gè)最簡單的block:
/*
void 返回值 表示調(diào)用這一段代碼會(huì)返回什么數(shù)據(jù)
(^block1) block1表示代碼塊的名(指針名)站辉,但是需要在指針名前添加"^"
(void) 參數(shù)划栓,里面跟的是參數(shù)類型和參數(shù)名兑巾,如果有多個(gè)參數(shù) 都寫在()中,但是需要用","分割
*/
void(^block1) (void) = NULL;
/*
^(void)表示的是block的參數(shù)忠荞,需要把block聲明時(shí)的參數(shù)寫過來
然后在"("之前添加"^",")"后添加一對(duì)"{}"蒋歌,
該大括號(hào)的內(nèi)容就是該block的代碼塊內(nèi)容
*/
block1 = ^(void) {
NSLog(@"-------");
};
block1();
無返回參數(shù) 和 有返回參數(shù) 的block使用
//無返回參數(shù)
void (^block2) (int a, int b) = ^(int a, int b) {
NSLog(@"------>%d", a + b);
};
block2(5, 6);
//返回類型為int
int (^block3) (int a, int b) = ^(int a, int b) {
return a + b;
};
NSLog(@"===>%d", block3(1, 2));
//再看下參數(shù)為 NSString 類型的
void (^bloak7) (NSString *text) = ^(NSString *text) {
NSLog(@"hello world! %@", text);
};
bloak7(@"小明");
NSString * (^block8) ( NSString *) = ^( NSString * text) {
return text;
};
NSLog(@"%@", block8(@"測(cè)試"));
以上的使用block都是表示某個(gè)類型的指針,使用場景多為某個(gè)方法當(dāng)中委煤,那我我們?nèi)绾文軐lock作為一個(gè)參數(shù)傳遞呢 堂油?,接下來我們就把block定義為某一類型的指針函數(shù)素标。舉例如下
//下面的這三種Block 就不再表示某個(gè)指針称诗,而是表示某一類型的指針 。例如 我可以用Block1來聲明 無參無返回的block指針
#import "ViewController.h"
typedef void (^Block4) (void);
typedef void (^Block5) (int a, int b);
typedef int (^Block6) (int a, int b);
再我們用關(guān)鍵字 typedef 定義了Block 類型后头遭,接下來的使用就舒服多了寓免,舉例如下
Block1 block4 = ^(void) {
NSLog(@"block4....");
};
block4();
Block2 block5 = ^(int m, int n) {
NSLog(@"---==%d", m + n);
};
block5(10, 12);
Block3 block6 = ^(int a, int b) {
return a + b;
};
int n = block6(10, 1);
NSLog(@"%d", n);
是不是頓時(shí)覺著使用起來舒服多了癣诱,哈哈這僅僅是個(gè)開始,接下來的章節(jié)我們將一起學(xué)習(xí)block 更精妙的部分 Learning together is Better
[第二節(jié) block知識(shí)學(xué)習(xí)(copy,__weak,__block)]
http://www.reibang.com/p/75f2d854e869