//
// 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;
}