Objective-C:自定义Block函数
2024-08-30 01:25:57
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修饰。
最新文章
- 7.7 数据注解特性--Table
- 问题解决——VC 断点 无效 一个可能情况?
- 【java】定时器
- C#中async/await中的异常处理
- C#实现通过程序自动抓取远程Web网页信息的代码
- jQuery分析(3) - jQuery.fn.init
- 编译安装zabbix
- C# 根据路线点集合动态分段
- 2810:完美立方-poj
- 反对抄袭 正解spring的@Autowired 不要相信网上的错误版本
- 三消游戏FSM状态机设计图
- 【Android Studio安装部署系列】七、真机运行项目
- [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
- Linux-04
- 详细分析LoadRunner参数化
- Confluence 6 使用 JConsole 监控远程 Confluence
- blfs(systemv版本)学习笔记-总页
- 基于nodejs的 本地文件夹http服务器:http-server
- 使用mysql workbench和vscode进行数据库差异比对
- 【LOJ】#2443. 「NOI2011」智能车比赛
热门文章
- python解析xml之lxml
- 【Exception】 java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.setOnDismissListener
- 关于VS2010中一打字,换行,拖控件便出现卡死的问题的解决方案
- Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)
- 本地wordpress博客系统安装搭建实践
- Google Guava学习笔记——基础工具类Joiner的使用
- linux 操作
- 【Tsinsen】【A1365】森林旅店
- SQLSERVER中WITH(NOLOCK)详解
- pragma伪指令