一屑埋、簡單Block的聲明和實現(xiàn)
- (void)viewDidLoad {?
? ? ?[super viewDidload];
//聲明block,void表示無返回值也可以聲明返回值
? ? ?void(^test)(void);
//定義test block
? ? ?test = ^{NSLog@"無返回值"}
//調(diào)用block
? ? test();
}
打印信息
2016-03-05 16:24:25.254 GCD-BLOCK[1064:29597] xxx
int (^myBlock) (int) = ^(int num){
return num * num;
}
說明:
int:返回值類型,如果沒有返回值則為void
(^myBlock):塊定義需要有一個^標(biāo)記镀赌,myBlock是塊名稱
(int):參數(shù)類型列表音念,如果沒有參數(shù)則為void
^(int num):以^開頭的參數(shù)列表沪饺,如果沒有則為void,也可以省略
{}:block體(相當(dāng)于函數(shù)體)
注意:block可以訪問局部變量但是不能對其進行賦值,也就是不能修改闷愤!如下圖錯誤:
想修改也是可以的整葡,加上__block 或者staic。例如: __block int a = 100;為什么要加讥脐?看百度結(jié)果:
此處不能修改的原因是在編譯期間確定的遭居,編譯器編譯的時候把a的值復(fù)制到block作為一個新變量(假設(shè)是a‘ = 10),此時a'和a是沒有關(guān)系的攘烛。