OC 中的block

OC 中的block,第1张

简介:block作为消息传递,在oc中的用处非常的广,自定义视图的回调,modal视图的回调,多线程中异步去加载数据等等,它的使用场景和代理有相似的地方,又比代理要广泛的多,所以说,block是每一个程序员都要去掌握的一个知识点

block 是c语言函数 是一个匿名的函数,基本的定义格式如下所示

block 的使用有两点需要注意的:1block 如果引用了外部的变量,会对引用的变量做一次copy,此时引用计数会+1;

2block 不可以修改局部的变量,不过要修改的话,要使用__block 来修饰局部变量;

block 在ARC中,是保存在堆区,在MRC中是保存在栈区,所以在MRC中需要使用使用copy 来记录block属性,在ARC中的话,是Strong,或者是copy都可以;

block呢存在的一个很大的问题,就是循环引用,如果我们掌握了它循环引用的原因,那么以后再项目中,我们就可以大胆,放心的去使用了

造成循环引用是有3种情况,"self ",属性记录block,以及成员变量,成员变量一定不要出现在block中,

block的用法:

一、作名词的用法:

1、block是可数名词,基本意思是指带有直边由较硬材料构成的长方形的块状物,如木块、石块或其他固体材料,引申则指高大的建筑物,即大厦、大楼等。在美国, block是指四面是马路的一块街区,或街区之间的距离; 在澳大利亚则指闹市或繁华的大马路。

2、block用作单位词,其前可加some等修饰。block修饰不可数名词时,表示复数意义的名词不变,只需将block变为blocks; 修饰可数名词复数时, block和所修饰的名词都须变成复数。

3、block用于比喻,作“障碍,障碍物”解时,是可数名词。泛指“阻塞;堵住”多用单数形式,表示多次或多处阻塞时用复数形式。

二、作动词的用法:

1、block的基本意思是“阻挡”,即在路上设置障碍。含有堵得十分严密,以致出入口完全封锁,通道完全受阻的意味。引申可用于抽象事物,指“妨碍”“阻碍”“冻结(资金)”。

2、block可用作及物动词,也可用作不及物动词。用作及物动词时,接名词或代词作宾语,不接动词不定式或从句,可用于被动结构,常与一些副词或介词连用,如in, off, up等。

3、在英国block指高大的房子,即“大厦”或“大楼”;

4、在美国block指四面邻街的一块地或建筑群,称为一个街区,也可指这样一个block的每一边,即两条平行街道之间的一段路。

扩展资料

block 读法 英 [blɒk]  美 [blɑk]

1、n 块;街区;大厦;障碍物

2、vt 阻止;阻塞;限制;封盖

3、adj 成批的,大块的;交通堵塞的

短语:

1、in block 块装;整批

2、block in 草拟,画草图

3、block up 阻碍;垫高;停用;阻塞

4、fault block 断块;故障闭塞;断裂地块

5、block diagram 框图;方块图

例句:

1、I started to move around him, but he blocked my way

我开始绕开他走,但他挡着我的路。

2、I cannot do maths I've got a mental block about it

我做不了数学。我一做就大脑一片空白。

微信小程序中的 block100 和 block101 具体执行几次,是有一定条件限制的。

block100 和 block101 是指在小程序的 WXML 模板中,如果标签上设置了 wx:for 以及 wx:key 属性,那么该 block 标签会被视为一个代码块,会根据 wx:for 定义的数据源进行循环迭代渲染,并且会被重复执行。

具体执行次数取决于循环的次数,也就是循环数据源的长度有多少个数据项。例如,如果使用 wx:for="{{array}}" 定义循环数据源,而 array 数组中有 5 个数据项,那么 block100 和 block101 标签都会被执行 5 次。

要注意的是,这里的执行次数仅指 block100 和 block101 标签内部的代码被执行的次数,而不是整个小程序的执行次数。

一般在汽车电子中给ECU刷写程序的时候,由于程序过大,超过多帧允许发送的最大字节数,就需要分块了,分块的大小按照嵌入式底层和上位机约定的大小,一般为1024个字节的整数倍。

按照多帧发送的规则,

大致回顾以下过程,

首先上位机发送请求,02 27 03

02:字节大小

27:服务号

03:子功能

下位机回复多帧发送

其中100A

1:表示多帧(多帧同样适用于程序刷写,依然是这个格式,当下位机通过该报文读取到字节数和块大小一样,那么发送BS为0,表示不分块)

00A:表示多帧的字节数A表示一共10个字节

下位机发送

上位机发送流控帧

30 08 0A

30:其中3表示流控帧;0(FS):表示流状态,继续发送,等待,还是其他

08(BS):表示块大小

0A:间隔时间

流控帧一般上位机和下位机约定固定值

流控帧发送:21表示多帧发送,第一个多帧应为在10 0A的时候已经发送一次了,所以从21开始;

一般多帧发送从20~2F依次循环,直到发送完该块的大小;

举例:

一个程序有2048个字节,那么我们规定一个块发送1024个字节,那么我们发送两个块就可以发送完毕该程序到下位机;

那么理论一个块需要发送几次循环的多帧呢?

1024/(716)=9

及就是循环20~2F一共9次就可以讲程序发送完毕;

20~2F一共有16帧,注意这个时候帧与帧之间的时间间隔,不能太短一般定为50ms

block是oc中一项强大的特性,是oc对闭包函数的实现实质上也是一个对象

当我们生命一个block的时候,如果这个block 没有捕获外部变量,那这个block就是在全局区,此时对NSGlobalBlock的retain ,copy,release 都是无效的,ARC,MRC下都是如此

1在ARC环境下 我们生命一个block(没有添加额外修饰符,默认strong), 一旦该block捕获了外部变量,系统会默认有一个copy动作将栈区的block迁移到堆区,延长block的生命周期,对于栈区的block而言,当函数推出的时候,该空间就被系统回收了

当我们使用weak或者是_unsafe_unretain关键修饰符的时候,系统就不会默认执行copy *** 作不会将其迁移到堆区,

2在MRC环境下需要手动实现copy *** 作

三,block捕获的外部变量,是将其copy到自己的数据结构内部来实现的,因此对于捕获的外部变量,block并不能修改,我要改变外部的内存地址,也就是使用_ _block修饰符,将指针在栈区的内存地址迁移到堆区,由此可见 block的作用是改变外部变量的内存地址,而不是简单 的使写 *** 作生效

3如果block捕获的外部变量是使用static 或者是声明的全局变量,那么block是可以直接修改该外部变量的因为全局变量或静态变量的地址是固定的存放于静态区block在读取静态区的变量时是可以直接从其所在的内存地址中读取的获取到最新的值,而不是在定义的时候copy的常量

1是否所有的Block中,使用self 都会导致循环引用?

答:UIView的调用的是类方法,当前控制器不可能强引用一个类 ,所以循环无法形成

答:masory 并没有强引用block ,里面的block只是局部变量,函数结束block就被释放了

原理:AFN无循环是因为绝大部分情况下,你的网络类对象是不会被当前控制器引用的,这时就不会形成引用环。(查阅资料得知)

答:不一定循环引用的原因是相互指引,相互是关键如果相互这一层关系达不到就没有所谓的循环引用

如下图

2那么什么情况下会引起循环引用

1>强引用自定义的block 里面再次调用self,导致的循环引用

2>循环引用的发生的条件就是强持有这个block ,并且被block里面的加入的对象强持有

3>使用NSNotification 使用系统自带的block 会发生循环引用如下图:

1block 为什么要是用copy修饰符

答:block声明之后内存是存在于栈上的,而不是存在于堆上它本身的作用域是创建时的作用域,一旦在作用外的地方调用block将导致程序崩溃

使用retain也可以,但是 block的retain行为 默认是用copy实现的

因为block变量默认为栈变量,为了能够在block声明的作用域外使用,所以把block拷贝到堆上去,所以说为了block属性声明和实际的 *** 作一致,最好声明为copy

意思是大块;大块石板;独栋大型建筑物;大宗;障碍;平面;纯色色块;滑轮。作动词时意思是堵塞;压印判明御在;用槐山木模给(帽子)定型。

相关例句:

1、She walked four blocks down High Street

她沿着商业大街走了4个街区。

2、Some students today blocked a highway that cuts through the center of the city

今天一些学生堵塞了一条贯穿市中心的公路。

3、I started to move round him, but he blocked my way

我准备绕过他,但他挡住了我。

近义词:check

check的最基本意思是“检查,核对”,指以确保某事物是否正确、安全、满意或处于良好状态,也可指检验以测试某事物的准确度或真假。

check还可表示“抑制”“控制”“阻碍”,指如用马缰绳套住马以防其放荡不羁一样地“控制”,如阻止发展、耽搁、击败某种力量、消除某种影响等,暗指阻止的突然性及其所用的力量。

在美式英语中,check可以作“寄存,托运”解,这种说法在英国极为少用。

check用作及物动词时可跟名词、代词、that/wh-从句作宾语,但接从句时不可用于被动结构。

check的宾语后面接掘岩介词against,表示“与…对照而检查”“跟…核对”;后接into表示“调查”;接to,表示“将…托运至…”;接in,表示“签到,报到;交运,寄存(行李)”;接off,表示“经核查无误而在…上作记号;不再考虑”;接with,表示“协商”(介词宾语为人)。

表示“相符;核对”(介词宾语为事或物);接out,表示“付账离开旅馆等;核对;合格;取或借;死”;接on〔up〕表示“调查;核对”。

以上就是关于OC 中的block全部的内容,包括:OC 中的block、block的用法、微信小程序block100,101执行几次等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10080219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存