iOS中Block介绍(一)基础

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

ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发。讨论范围:block的使用,内存管理,内部实现。不包含的内容:gc arc下的block内存,block在c++中的使用。

一、概述

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

二、热身

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


  1. int multiplier = 7; 
  2. int (^myBlock)(int) = ^(int num) { 
  3.     return num * multiplier; 
  4. }; 

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

来,让我们typedef一下


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

三、更详细的例子

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

主动调用一下:


  1. - (void)someMethod 
  2. { 
  3.     BoolBlock ablock = ^(BOOL bValue) { 
  4.         NSLog(@"Bool block!"); 
  5.     }; 
  6.     ablock(); 
  7. } 

作为参数返回:


  1. typedef void (^BoolBlock)(BOOL); 
  2. - (BoolBlock)foo() 
  3. { 
  4.     BoolBlock ablock = ^(BOOL bValue) { 
  5.         NSLog(@"Bool block!"); 
  6.     }; 
  7.     return [[ablock copy] autorelease];//一定要copy,将其复制到堆上,更详细的原理,将在后续章节讲解 
  8. } 

类的一个成员:


  1. @interface OBJ1 : NSObject 
  2. @property (nonatomic, copy)BoolBlock block;//理由同上啊,同学们 
  3. @end 
  4.  
  5. OBJ1 *obj1 = ... 
  6. obj1.block = ^(BOOL bValue) { 
  7.         NSLog(@"Bool block!"); 
  8.     }; 

其他函数的参数:


  1. - (void)foo(BoolBlock block) 
  2. { 
  3.     if (block) { 
  4.         block(); 
  5.     } 
  6. } 

甚至其他block的参数:


  1. BoolBlock bBlock = ^(BOOL bV){if(Bv){/*do some thing*/}}; 
  2. HugeBlock hBlock = ^(BoolBlock bB) {bB();}; 
  3.  
  4. hBolck(bBlock); 

啊,全局变量!:


  1. static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;}; 
  2. int main() 
  3. { 
  4.     printf("%d\n", maxIntBlock(2,10));   
  5.     return 0; 
  6. } 

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

四,特殊的标记,__block

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


  1. int main() 
  2. { 
  3.     __block int i = 1024; 
  4.     BoolBlock bBlock = ^(BOOL bV) { 
  5.         if (bV) { 
  6.             i++;//如果没有__block标记,是无法通过编译的。 
  7.         } 
  8.     }; 
  9. } 

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

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题 本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。 阅读详情

相关推荐

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新

2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。

weixin_45821055的博客 1771

Block介绍(一)基础

一、概述 Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。   二、热身 先看一个比较简单的Block例子: int multiplier = 7; int (^myBlock)(int) = ^(int num) { return nu

The Life with iOS 830

pgsql行列转换

‌是PostgreSQL中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格,每个分割后的部分作为一行‌‌。string_agg() 函数是 PostgreSQL 中的一个聚合函数,用于将一个列中的值连接成一个字符串。

chimchim66的博客 3501

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

ANSYS HFSS 中的相控天线阵列仿真方法

相控天线阵列系统广泛使用,从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算,需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统,同时考虑复杂激励、环境(即附近的天线)和平台对其性能的影响。本博客介绍了可用于有效仿真相控天线阵列的不同方法。以下是不同仿真方法的简要概述,视频链接中提供了完整的演示。ANSYS HFSS 提供 4 种不同的相控天线阵列仿真方法:1) 晶胞-无限阵列。

jkh920184196的博客 4248

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者,代表了一个跨平台的多媒体框架,开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型,从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影。

深之JohnChen的专栏 1770

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

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

weixin_44754915的博客 662

Allegro如何设置走线自动删除重复走线操作指导

Allegro如何设置走线是自动删除重复走线操作指导在PCB布线的时候,点到点需要重复走一段线的时候,希望原来的线段自动被删除,Allegro设计的时候支持这个操作如下图,重复走中间的线段的时候,希望下方的走线自动删除具体操作如下This section is describe what the function allegro have ,helpfully could let user know more about allegroAllegro Design and Analysis includes

weixin_54787054的博客 4497

Block定义与使用

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

花色1125的博客 564

从苏宁电器到卡巴斯基(第二部)第14篇:我在卡巴的日子 XIV

目录 WannaCry 我的感慨 邻里矛盾 WannaCry 如果大家对于科技互联网圈子的新闻比较感兴趣的话,相信会对2017年5月的“WannaCry勒索病毒”事件记忆犹新,因为这个病毒在当时的全世界范围内掀起了极大的波澜,众多的企事业单位深受其害,造成的金钱和数据损失难以估量,从某种意义上来说,它甚至引领了勒索病毒新一轮的爆发浪潮。而通过这样的一次爆发,也让我对于卡巴斯基的技术实力有了更进一步的了解。 我记得很清楚,爆发的那天是周六,没记错的话Seth那天有事,就请假没来,只有我自己在公司值

Gleam的专栏 4919

电气:蒙特卡洛1000个风光场景并通过削减法|聚类法得到几个典型场景(matlab\python实现)

    个人电气目录传送门:学好电气全靠它,个人电气博文目录(持续更新中…)     本文内容包括22页(代码和一些自己对风光的观点) 提示:专栏解锁后,可以查看该专栏所有文章,划算。 文章目录一、理论依据1.风电DG出力概率模型1.2光伏DG出力概率模型1.3对风光的认识二、蒙特卡洛模拟1000个风光场景、并通过削减法得到5个典型风电场景 (Matlab 版程序)三、蒙特卡洛模拟1000个风光场景、并通过聚类法得到5个典型

总裁余(余登武)博客 7681

block传值 链接

iOS传值之block传值(一) 转载于:https://www.cnblogs.com/dqxu/p/4016117.html

weixin_30312659的博客 90

微信小程序 - {errCode: 10008, errno: 1500104, errMsg: “writeBLECharacteristicValue:fail write characteris

微信小程序errCode: 10008, errno: 1500104, errMsg: "writeBLECharacteristicValue:fail write characteristics error. 10008, errMsg=The value's length is invalid.",uni-app微信小程序报错,uniApp小程序调用蓝牙api报错,向低功耗蓝牙设备的某个特征写入数据时错误,UniApp微信小程序蓝牙API调用报错10008解决方案,蓝牙设备进行通信时,向设备写入数据

🏆 前端领域优质创作者 4431
上一篇: 进程与线程
下一篇: iOS中Block介绍(二)内存管理与其他特性
BobooO
博客等级 码龄18年 29粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值