Block介绍(一)基础

VINS-Mono 代码详细解读——基础储备:在线Cam到IMU的外参标定 InitialEXRotation类 本讲还是为了estimator类中最主要的函数processImage()做知识储备。 前面两讲知识储备主要讲了IMU预积分相关的integrationBase类以及图像特征点管理器feature_manager.cpp,本节将对processImage()的相机到IMU的外参矩阵的代码讲解。 processImage()中: 第一步为检测当前输入的image是否为关键帧,f_mana... 阅读详情

一、概述

Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。

 

二、热身

先看一个比较简单的Block例子:

int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};

在这个例子中,myBlock是一个Block变量,它接受一个int类型的参数,返回一个int类型的值。是不是很像C函数?

来,让我们typedef一下

typedef void (^BoolBlock)(BOOL);//一个只接受一个BOOL参数,没有返回值的block
typedef int (^IntBlock)(void);//一个没有参数,返回int的block
typedef BoolBlock (^HugeBlock)(IntBlock);//看看,这个HugeBlock的参数和返回值都是block
 

三、更详细的例子

注意,上面的typedef都还有效~

主动调用一下:
- (void)someMethod
{
    BoolBlock ablock = ^(BOOL bValue) {
        NSLog(@"Bool block!");
    };

    ablock();
}
作为参数返回:
typedef void (^BoolBlock)(BOOL);
- (BoolBlock)foo()
{
    BoolBlock ablock = ^(BOOL bValue) {
        NSLog(@"Bool block!");
    };
    return [[ablock copy] autorelease];//一定要copy,将其复制到堆上,更详细的原理,将在后续章节讲解
}
类的一个成员:
@interface OBJ1 : NSObject
@property (nonatomic, copy)BoolBlock block;//理由同上啊,同学们
@end

OBJ1 *obj1 = ...
obj1.block = ^(BOOL bValue) {
        NSLog(@"Bool block!");
    };
其他函数的参数:
- (void)foo(BoolBlock block)
{
    if (block) {
        block();
    }
}
甚至其他block的参数:
BoolBlock bBlock = ^(BOOL bV){if(Bv){/*do some thing*/}};
HugeBlock hBlock = ^(BoolBlock bB) {bB();};

hBolck(bBlock);
啊,全局变量!:
static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;};
int main()
{
    printf("%d\n", maxIntBlock(2,10));  
    return 0;
}

好了,你知道block大概能怎么用了。

 

四,特殊的标记,__block

如果要在block内修改block外声明的栈变量,那么一定要对该变量加__block标记:

int main()
{
    __block int i = 1024;
    BoolBlock bBlock = ^(BOOL bV) {
        if (bV) {
            i++;//如果没有__block标记,是无法通过编译的。
        }
    };
}

 

好了,基础很快,更详细的内容将用来介绍深入的东西。

告别复杂配置:dbswitch vs 传统工具(Kettle/DataX)在Greenplum数据同步中的性能对比 本文深入对比了新兴工具dbswitch与传统ETL工具Kettle、DataX在Greenplum数据同步中的表现。重点分析了dbswitch如何通过免中间文件、利用二进制COPY协议等设计,在异构数据库同步场景下实现更优的性能和更简化的配置,为技术选型提供清晰参考。 阅读详情

相关推荐

PyTorch实战:用FGSM攻击MNIST分类器(附可视化对比)

本文通过PyTorch实战演示了如何使用FGSM对抗攻击方法攻击MNIST手写数字分类器。文章详细解析了FGSM攻击原理,提供了从环境搭建、模型准备到攻击实施、可视化对比的完整代码实战流程,并探讨了对抗样本的生成与模型鲁棒性评估。

3a9bq4r8t2y的博客 216

Materix.block

参考文章:https://blog.youkuaiyun.com/qq_27251141/article/details/90442072 这里添加了几处代码注释便于理解 #include <iostream> #include "Eigen/Dense" using namespace std; using namespace Eigen; int main() { MatrixXf m(4,4); m<< 1,2,3,4, 5,6,7,8,

liang_yy的博客 218

Aurix TC3XX Cache memory分析

Aurix Cache memory 分析

qwe0405080615的博客 4345

VINS-Mono无ROS版本代码阅读(6):联合初始化

初始化的思路为: (1)用SFM求解滑窗内所有帧的位姿,和所有路标点的3D位置。 主要函数:relativePose 和GlobalSFM construct (2)和imu预积分的值对齐,求解重力方向,尺度因子,陀螺仪偏差和每一帧的速度。 前面得到的信息:滑动窗口内所有帧相对于参考帧的RT,滑动窗口内所有观察到的特征点的三维路标(相对于参考帧坐标系) 本文主要阅读:visualInitialAlign部分。 bool Estimator::visualInitialAlign() {

weixin_44754915的博客 661

CSR mascon产品深度解析

GRACE数据产品 mascon产品 质量变化 地球重力场

weixin_43047707的博客 4432

SAP_SD模块-销售批次策略应用记录

SAP_SD模块-销售批次策略完整案例

风沙的博客 2609

Block定义与使用

1.Block是块语法,本质上是匿名函数(也就是没有函数名的方法)。它和函数指针类似。 2.Block定义 int (^myBlock)(int) = ^int(int num1){ return num1 + 2; }; 等号左边 int 代表Block的返回值类型 (^myBlock) ^是块标识符,后边是对象名称 (int) 是参数列表的类型,可以有多个参数,也可以为0个

花色1125的博客 564

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

随着人工智能技术在农业领域的深入应用,基于深度学习的害虫检测系统已成为智慧农业的重要组成部分。本文详细介绍了一种基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统,涵盖算法原理、数据集构建、模型训练、系统实现及完整代码。该系统能够实时检测并识别多种农作物害虫,为农业生产提供精准的病虫害监测解决方案。

YOLO 273

软件测试 -- Bug等级划分规范

1.Blocker级别——中断缺陷 客户端程序无响应,无法执行下一步操作。 2.Critical级别――临界缺陷,包括: 功能点缺失,客户端爆页。 3.Major级别——较严重缺陷,包括: 功能点没有满足需求。 4.Normal级别――普通缺陷,包括: 1.数值计算错误 2.JavaScript错误。 5.Minor级别—一次要缺陷,包括: 1.界面错误与UI需...

weixin_33744141的博客 629

SAP 采购申请、采购订单的审批策略

采购申请、采购订单的审批策略 采购申请审批 PR审批可以分为:含分类、无分类 1、无分类PR审批: A、后台配置: 设置批准代码(批准代码可以设置多级审批): 发布批准标识使用系统已有的 “2 询价/采购订单”: 新建采购申请审批策略Z1(仅设置1级审批,一共可以设置8级审......

willieyuan的博客 2万+

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3275

iOS中Block介绍(一)基础

ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发。讨论范围:block的使用,内存管理,内部实现。不包含的内容:gc arc下的block内存,block在c++中的使用。 AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 一、概述 Block是C级别的语法和运行时特性。Block比较类似C函数

lijunhao2011的博客 510

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2185

Arduino UNO Q:教育级开发板的工程价值与项目落地指南

Arduino UNO Q 是面向初学者与教育场景优化的AVR开发板,基于ATmega328P主控,集成CH340E USB转串口芯片与高精度LDO稳压电路,显著提升供电稳定性与系统兼容性。其核心价值在于降低硬件入门门槛——通过免驱支持、低纹波电源(<15mVpp)、图形化编程App Lab及结构化Project Guide,将认知负荷聚焦于逻辑设计而非驱动配置或寄存器操作。技术上支撑‘arduino智能小车’‘arduino驱动数码管’等高频实践需求,同时为进阶应用(如结合ESP32实现OTA升级)提供清

weixin_34239169的博客 201

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 把UIView切成任意形状
下一篇: Block介绍(二)内存管理与其他特性
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值