//
//??main.m
//??1211塊練習
//
//??Created?by?jerehedu?on?14/12/11.
//??Copyright?(c)?2014年?jereh.?All?rights?reserved.
//
?
#import?<Foundation/Foundation.h>
?
int?a=10;
?
int?b=12;
?
?
int?main(int?argc,?const?char?*?argv[])
{
//????int?__block?c=19;
?
????@autoreleasepool?{
????????
????????//block能夠訪問局部變量,可是不能改動
????????//__block?塊改動?keyword???不加的話無法在塊內對c(局部變量)進行改動
????????__block?int??c=19;
????????
????????void?(^nBlock)()=^{
????????????c+=9;
????????????NSLog(@"%i",c);
????????????
????????};
????????nBlock();
????????
????????//外部變量能夠直接操作、改動
????????void?(^nmBlock)()=^{
????????????
????????????NSLog(@"%i",++a);
????????????
????????};
????????nmBlock();
????????
????????
????????NSLog(@"%i,%i",a,b);
????????
????????//block保存一段代碼,用花括號括起來
????????//block標志是^
????????/*block與函數比較
?????????1.能夠保存代碼
?????????2.有返回值
?????????3.有形參
?????????4.調用方式和C調用函數一樣
?????????*/
????????
????????
????????//沒有參數返回值的塊
????????void?(^?myBlock)();
????????myBlock=^{
????????????NSLog(@"沒有參數返回值的塊。
");
????????
????????};
????????//直接寫完不會被運行,被保存起來了,須要調用
????????//塊的調用
????????myBlock();
????????
????????//寫在一起
????????void(^?myblock)()=^{
????????????NSLog(@"沒有參數返回值的塊。
");
????????};
????????myblock();
????
????????//能夠把塊寫在main的上面,則整個函數體內直接調用就可以
//==========================================================
????????//有參數返回值的?加法
????????int?(^?addBlock)(int,int)????????=??????^(int?a,int?b){
????????????return?a+b;??//此處括號內形參能夠省略
????????};
????????NSLog(@"有參數返回值的?加法??%i",addBlock(1,2))??;
????????
????????
????????//通過block,打印出N條直線。N是調用塊時傳入
????????void(^?lineBlock)(int)=^(int?N){
????????????for?(int?i=0;?i<N;?i++)?{
????????????????NSLog(@"______________");
????????????}
????????};
????????lineBlock(5);
????????
????????//減法
????????int?(^?subBlock)(int,int)=^(int?a,int?b){
????????????return?a-b;
????????};
????????NSLog(@"減法?%i",subBlock(23,12));
????????
????????
????????//typedef??用MyBlock取代int?(^?MyBlock)(int,int)
????????typedef?int?(^?MyBlock)(int,int);
????????
????????//乘法簡化?MyBlock是類型,不能直接用來調用block,須要用變量名來調用
????????
????????MyBlock?mulBlock=^(int?a,int?b){
????????????return?a*b;
????????};
????????
????????NSLog(@"乘積為:?%i",mulBlock(1,2));
????????
????????//除法
????????MyBlock?divBlock=^(int?a,int?b){
????????????return?a/b;
????????};
????????NSLog(@"商為:?%i",divBlock(9,3));
????????
????????
????????
????????
????????
????????
????????
????}
????
????return?0;
}
?
?