// // main.m // daimakuai // // Created by 非凡程序員_02 on 15/11/3. // Copyright (c) 2015年 非凡程序員_02. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //普通代碼塊 void (^my_block)(void)=^ void{ NSLog(@"無參代碼塊"); }; //代碼塊調用 my_block(); //有參數和返回值的普通代碼塊 int (^my_block1)(int)=^ (int number){ return number*number; }; //定義變量接收返回的數據 int a=my_block1(5); NSLog(@"有參數的代碼塊:%d",a); //構造代碼塊 typedef void (^jiafa) (int,int); jiafa jia=^(int num1,int num2){ int a; for (int i=num1; i<=num2; i++) { a+=i; } NSLog(@"%d",a); }; jia(23,34); //下面的這個代碼塊能夠對數組元素進行排序 NSArray *array=@[@"hello",@"world",@"add"]; NSArray *array1=[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSLog(@"XXX%@,%@",obj1,obj2); return [obj1 compare:obj2]; }]; NSLog(@"%@",array1); //靜態代碼塊:在普通代碼塊前面加上static關鍵字,通常是在遞歸調用的時候定義這樣的類型。如下是兩個計算1-10相加和的例子 //第一種方法 static int (^sum_blocks)(int)=^(int i) { if (i<11) { i=sum_blocks(i+1)+i; } return i; }; sum_blocks(0); //第二種方法 static int num=0; static void (^blocks)(int)=^(int i) { if (i>0) { num+=i; blocks(i-1); } }; blocks(10); NSLog(@"1-10的和是:%d",num); //__block 定義變量的值能夠在代碼塊中修改,__block定義的變量不能在靜態代碼塊裏面使用 __block double c=3; void (^multiply)(double,double)=^(double a,double b){ c=a*b; }; multiply(2,4); NSLog(@"%f",c); } return 0; }