// // main.m // Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。 // 用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以, // 函数指针和block是一样的,相当于代码指针。 #import <Foundation/Foundation.h> void printRose(int num) { for (int i = 0; i < num; ++i) { printf(" {@} \n"); printf(" | \n"); printf(" \\|/ \n"); printf(" | \n"); } } int sum(int value1, int value2) { return value1 + value2; } int main(int argc, const char * argv[]) { //printRose(); // void代表指向的函数没有返回值 // ()代表指向的函数没有形参 // (*roseP)代表roseP是一个指向函数的指针 // void (*roseP) (); // roseP = printRose; // roseP(); // 定义一个block变量, // block和函数一样,可以没有返回值,也没有形参,也可以没有返回值有形参,也可以有返回值没有形参,也可以有返回值有形参 // 所以, 在定义一个block变量的时候, 也需要告诉该变量将来保存的代码有没有返回值和形参 // void代表block将来保存的代码没有返回值 // ()代表block将来保存的代码没有形参 // (^roseBlock) 代表reseBlock是一个block变量, 可以用于保存一段block代码,把*换成^, void (^roseBlock) (); // 如果block没有参数, 那么^后面的()可以省略 roseBlock = ^(){ printf(" {@} \n"); printf(" | \n"); printf(" \\|/ \n"); printf(" | \n"); }; // 要想执行block保存的代码, 必须调用block才会执行 roseBlock(); roseBlock(); printRose(10); void (*roseP)(int); roseP = printRose; roseP(3); void (^roseBlock1) (int); roseBlock1 = ^(int num){ for (int i = 0; i < num; ++i) { printf(" {@} \n"); printf(" | \n"); printf(" \\|/ \n"); printf(" | \n"); } }; roseBlock1(2); int (*sumP)(int, int); sumP = sum; NSLog(@"sum = %i", sumP(10 , 20)); int (^sumBlock) (int, int); sumBlock =^(int value1, int value2){ return value1 + value2; }; NSLog(@"sum = %i", sumBlock(10, 40)); // block是一种数据类型 int (^printBlock)(int)= ^int (int num){ for (int i=0; i<num; ++i) { printf("--------\n"); } return 1; }; printBlock(2); int a = 10; int b; b = 20; return 0; }
// // main.m // Block和typedef // #import <Foundation/Foundation.h> int sum(int value1, int value2) { return value1 + value2; } int minus(int value1, int value2) { return value1 - value2; } typedef int (*calculte)(int, int); // 注意: 利用typedef给block起别名, 和指向函数的指针一样, block变量的名称就是别名 typedef int (^calculteBlock)(int , int); int main(int argc, const char * argv[]) { int (*sumP)(int, int); sumP = sum; calculte sumP1 = sum; NSLog(@"sum = %i", sumP1(20, 10)); int (*minusP)(int, int); minusP = minus; calculte minusP1 = minus; NSLog(@"minus = %i", minusP1(20, 10)); int (^sumBlock)(int , int ); calculteBlock sumBlock1 = ^(int value1, int value2){ return value1 + value2; }; NSLog(@"sum = %i", sumBlock1(20, 10)); int (^minusBlock)(int , int); calculteBlock minusBlock1 = ^(int value1, int value2){ return value1 - value2; }; NSLog(@"minus = %i", minusBlock1(20, 10)); return 0; }
本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7436372.html,如需转载请自行联系原作者