/* 在代碼快列印數字 */ NSLog(@"----------------resultBlocks---------------------->"); int(^resultBlocks)(int) =^(int num) { return num*20; }; int resultNum = resultBlocks(2); NSLog(@"result: %4d",resultNum); NSLog(@"--------------myprintBlock------------------------>"); void(^myprintBlock)(NSString *x)= ^(NSString *str){NSLog(@"@printBlock: %@",str);}; myprintBlock(@"Hello block"); NSLog(@"---------------printNumBlock----------------------->"); /* 在代碼快多個參數用 逗號隔開 */ void(^printNumBlock)(int,int); printNumBlock = ^(int num,int num2) { num = num+num2; NSLog(@"printNum: %d",num); }; printNumBlock(10000,1000); NSLog(@"---------------遞迴使用----------------------->"); /** 代碼快用在遞迴時候要注意了,要在調用之前初始化好整個代碼快,否則會運行錯誤! 怎麼結局錯誤呢? 1: 用sataic 關鍵字 使其在真箇類初始化之前初始化好 2: 使用 __block 關鍵字 */ __block void(^const blocks)(int)=^(int i) { if (i > 0) { NSLog(@"num: %d",i); blocks(i- 1); } }; blocks(4); static void(^const blocks2)(int)=^(int i) { if (i > 0) { NSLog(@"num: %d",i); blocks2(i- 1); } }; blocks2(4); NSLog(@"---------------sortArray----------------------->"); /* 在代碼快中字串數組排序 */ NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 0.5", nil]; NSComparator sortBlcok = ^(id String1, id String2) { return [String1 compare:String2]; }; NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlcok]; NSArray *sortArray2 = [stringArray sortedArrayUsingComparator:^(id String1, id String2){ return [String1 compare:String2]; }]; NSLog(@"stringArray: %@",stringArray); NSLog(@"sortArray: %@",sortArray2); NSLog(@"------changeGlobalBlock--------------------------->"); /* 在代碼快中 改變全域部變數編 */ void(^changeGlobalBlock)(void)=^(void){ global++; }; changeGlobalBlock(); NSLog(@"changeGlobalBlock: %d ",global); NSLog(@"------changLocalNumBlock--------------------------->"); /* 在代碼快中 改變局部變數編譯是通不過的,需要在前面加 __block 關鍵字,否則會報這樣的一個錯誤 Variable is not assignable(miss_block type specifier */ __block int localNum =500; void(^changLocalNumBlock)(int)= ^(int i){ localNum = localNum+i; }; changLocalNumBlock(30); NSLog(@"changLocalNumBlock: %d",localNum);
參考這個部落格:
http://blog.sina.com.cn/s/blog_71715bf8010166ux.html