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=; i<; i++)
{
NSLog(@"i:%d",i);
}
}; //调用block函数
block(); return ;
}

运行结果:

-- ::35.317 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
Program ended with exit code:

第二种形式:自定义一个无返回值但是有参数的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=; i<length; i++)
{
NSLog(@"i:%d",i);
}
}; //调用block函数
block();
} return ;
}

运行结果:

-- ::35.317 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
-- ::35.319 自定义Block函数[:] i:
Program ended with exit code:

第三种形式:自定义有返回值但是无参数的block函数类型

typedef int (^ThirdBlock)(void);
static int sum = ;
//创建block,并将代码封装其中
ThirdBlock block3 = ^(){
for (int i=; i<; i++)
{
sum = sum + i;
}
return sum;
}; //调用block函数
NSLog(@"sum=%d",block3());

运行结果:

-- ::21.171 自定义Block函数[:] sum=
Program ended with exit code:

第四种形式:自定义有返回值而且有参数的block函数类型

//第四种形式:自定义有返回值而且有参数的block函数类型
typedef int (^FourBlock)(int);
//创建block,并将代码封装其中
FourBlock block4 = ^(int length){
return length;
}; //调用block函数
NSLog(@"block4=%d",block4());
}

运行结果:

-- ::21.171 自定义Block函数[:] block4=
Program ended with exit code:

最后还有一个知识点:

所以,对block声明为属性时,使用copy修饰。

最新文章

  1. 7.7 数据注解特性--Table
  2. 问题解决——VC 断点 无效 一个可能情况?
  3. 【java】定时器
  4. C#中async/await中的异常处理
  5. C#实现通过程序自动抓取远程Web网页信息的代码
  6. jQuery分析(3) - jQuery.fn.init
  7. 编译安装zabbix
  8. C# 根据路线点集合动态分段
  9. 2810:完美立方-poj
  10. 反对抄袭 正解spring的@Autowired 不要相信网上的错误版本
  11. 三消游戏FSM状态机设计图
  12. 【Android Studio安装部署系列】七、真机运行项目
  13. [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
  14. Linux-04
  15. 详细分析LoadRunner参数化
  16. Confluence 6 使用 JConsole 监控远程 Confluence
  17. blfs(systemv版本)学习笔记-总页
  18. 基于nodejs的 本地文件夹http服务器:http-server
  19. 使用mysql workbench和vscode进行数据库差异比对
  20. 【LOJ】#2443. 「NOI2011」智能车比赛

热门文章

  1. python解析xml之lxml
  2. 【Exception】 java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.setOnDismissListener
  3. 关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
  4. Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)
  5. 本地wordpress博客系统安装搭建实践
  6. Google Guava学习笔记——基础工具类Joiner的使用
  7. linux 操作
  8. 【Tsinsen】【A1365】森林旅店
  9. SQLSERVER中WITH(NOLOCK)详解
  10. pragma伪指令