Block函数是一种类似于函数指针的函数,程序员只需要把需要操作的代码封装到定义的block中即可,以后需要使用时,直接调用,非常方便....
举例如下:
第一种形式:自定义一个无返回值而且无参数的block
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //第一种形式:自定义无参数的block函数类型 typedef void (^FirstBlock)(void); //创建block,并将代码封装其中 FirstBlock block = ^(void){ for (int i=0; i<5; i++) { NSLog(@"i:%d",i); } }; //调用block函数 block(); return 0; }
运行结果:
2015-10-17 18:38:35.317 自定义Block函数[2507:145127] i:0 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:1 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:2 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:3 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:4 Program ended with exit code: 0
第二种形式:自定义一个无返回值但是有参数的block
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //第二种形式:自定义有参数的block函数类型 typedef void (^SecondBlock)(int); //创建block,并将代码封装其中 SecondBlock block = ^(int length){ for (int i=0; i<length; i++) { NSLog(@"i:%d",i); } }; //调用block函数 block(5); } return 0; }
运行结果:
2015-10-17 18:38:35.317 自定义Block函数[2507:145127] i:0 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:1 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:2 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:3 2015-10-17 18:38:35.319 自定义Block函数[2507:145127] i:4 Program ended with exit code: 0
第三种形式:自定义有返回值但是无参数的block函数类型
typedef int (^ThirdBlock)(void); static int sum = 0; //创建block,并将代码封装其中 ThirdBlock block3 = ^(){ for (int i=0; i<5; i++) { sum = sum + i; } return sum; }; //调用block函数 NSLog(@"sum=%d",block3());
运行结果:
2015-10-25 16:43:21.171 自定义Block函数[3172:151234] sum=10 Program ended with exit code: 0
第四种形式:自定义有返回值而且有参数的block函数类型
//第四种形式:自定义有返回值而且有参数的block函数类型 typedef int (^FourBlock)(int); //创建block,并将代码封装其中 FourBlock block4 = ^(int length){ return length; }; //调用block函数 NSLog(@"block4=%d",block4(5)); }
运行结果:
2015-10-25 16:43:21.171 自定义Block函数[3172:151234] block4=5 Program ended with exit code: 0
最后还有一个知识点:
所以,对block声明为属性时,使用copy修饰。
程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!