//
// main.m
// Block基本使用:一种数据类型,应用在动画,多线程,集合遍历,网络请求回调。
// 用来保存一段代码,在恰当的时候拿出来调用。功能类似于函数。函数不能嵌套定义,block可以,
// 函数指针和block是一样的,相当于代码指针。 #import <Foundation/Foundation.h> void printRose(int num)
{
for (int i = ; 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(); void (*roseP)(int);
roseP = printRose;
roseP(); void (^roseBlock1) (int);
roseBlock1 = ^(int num){
for (int i = ; i < num; ++i) { printf(" {@} \n");
printf(" | \n");
printf(" \\|/ \n");
printf(" | \n");
} };
roseBlock1(); int (*sumP)(int, int);
sumP = sum;
NSLog(@"sum = %i", sumP( , )); int (^sumBlock) (int, int);
sumBlock =^(int value1, int value2){
return value1 + value2;
};
NSLog(@"sum = %i", sumBlock(, )); // block是一种数据类型 int (^printBlock)(int)= ^int (int num){
for (int i=; i<num; ++i) {
printf("--------\n");
}
return ;
};
printBlock(); int a = ;
int b;
b = ;
return ;
}
//
// 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(, )); int (*minusP)(int, int);
minusP = minus; calculte minusP1 = minus;
NSLog(@"minus = %i", minusP1(, )); int (^sumBlock)(int , int ); calculteBlock sumBlock1 = ^(int value1, int value2){
return value1 + value2;
};
NSLog(@"sum = %i", sumBlock1(, )); int (^minusBlock)(int , int); calculteBlock minusBlock1 = ^(int value1, int value2){
return value1 - value2;
};
NSLog(@"minus = %i", minusBlock1(, )); return ;
}

最新文章

  1. Kinect 总结---Kinect基本认识
  2. 易云盘(nester)-面对企业的和团队文档管理的平台
  3. Properties+重温Map+本地计数器
  4. TreeMap按照key排序
  5. $inArray()总是返回-1
  6. crontab 例行性排程
  7. 修改Capfile,在正式环境不再使用migration修改数据库
  8. Stanford大学机器学习公开课(六):朴素贝叶斯多项式模型、神经网络、SVM初步
  9. 同IP不同端口Session冲突问题
  10. Request、Request.Form、Request.QueryString 用法的区别
  11. Team Homework #3: The feedback of predecessors
  12. SGU 200. Cracking RSA(高斯消元+高精度)
  13. 基于POI和DOM4将Excel(2007)文档写进Xml文件
  14. 【65】Mybatis详解
  15. 使用Gradle发布SNAPSHOT版本到JCenter(oss.jfrog.org)
  16. Django的Models字段含义
  17. git使用kdiff3合并乱码问题
  18. Celery初识及简单实例
  19. [再寄小读者之数学篇](2014-10-27 Frobenius 范数是酉不变范数)
  20. C# 任务 数据加载不影响其他操作

热门文章

  1. 使用WindowBuilder设计Swing程序
  2. Paint、Canvas
  3. Alpha Edition [ Group 1 ]
  4. linux shell &amp; bash
  5. Java_Web三大框架之Hibernate+HQL语言基础
  6. PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unkno…
  7. CAD在网页中如何得到用户自定义事件的参数?
  8. Sping bean的作用域
  9. 学不好Python?我们分析看看正确的学习方法是什么-马哥教育
  10. 一篇入门AngularJS