//// main.m// Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。// 用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以,// 函数指针和block是一样的,相当于代码指针。#importvoid 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
//// main.m// Block和typedef//#importint 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;}