首页 > 其他分享 >block详解

block详解

时间:2023-02-05 21:05:10浏览次数:41  
标签:testVC 定义 testhaha 详解 执行 方法 block


在网上搜关于block的知识都不是特别详细,在这里对block做一个详细的描述,从入门开始到满足日常大部分开发需要。

block定义:block说白了就是一段代码块,提前存储一段代码,想要执行存储的那块代码,调用一下就执行,用于回调。和函数作用差不多,但是比函数更加灵活,可以在方法体外定义为全局,也可以在方法体内部定义为局部,但是函数不行只能在方法体外定义为全局,block块更加灵活。话不多说,直接上代码,刚写的Demo,描述与截图供大家就爱神理解。

block入门:


1.block块内部有时候会引用块外部局部变量,块内部局部变量值变化了,不会影响外部局部变量的值。但是加上关键字__block情况就相反了。


block详解_block带有局部和全局参数


2.block块内部有时候会引用块外部的全局变量,情况会和加上__block的结果一样。不过这里引用全局变量会出现循环引用的问题。


block详解_block_02


block详解_block带有局部和全局参数_03




  在这里附上具体出现循环引用的解决办法。


block详解_block_04




block的定义:


第一种是用 typedef 第二种是直接定义作为一个属性 这样block块可以夸区域,在不同的类之间进行传递调用,


        具体解释区别如下图解释:


block详解_block用法_05




block进阶




   将block块作为一个参数在类之间传递,并且block块内部包装了一个方法,当从类A传递到B之后,在B中创建一个对应类型的属性block去接受,在适当的时候去触发执行,这个例子在日常开发中也会常遇到。具体操作看截图


在storyboard自带的biewController中写一个testhaha的方法,并且在Main.storyboard中加赠一个跳转按钮的方法,点击跳转进入testViewController,并testVC的带block参数的方法,将来testhaha方法传递到testVC页面


block详解_block作为参数传递_06


在testVC中会有一个同类型的block区接受传过来的block参数(内部包有testhaha方法),在需要的时候去调用执行


block详解_block_07


在testVC界面上又一个触发block方法命名的按钮(方法名是trigger ),点击之后会触发本地保存的block去执行,释放代码块执行testhaha方法


block详解_什么是block_08


这样在testVC界面点击了触发block方法按钮,就会执行testVC方法  输出


block详解_block作为参数传递_09




第二个关于进阶要讲解的就是返回参数的操作,在这里不做过多讲解,就是后几张图中加//注释的部门,并附有结束说明,给大家留个练习题,研究一下 ~@^@~






block作为参数传递的一些心得体会:


下面图1在红框[testVC  ]左边应该加上 上面一行int b = 来接收·~因为这个带有block参数的方法,返回值是int


block详解_什么是block_10






block详解_block带有局部和全局参数_11




block详解_block作为参数传递_12




标签:testVC,定义,testhaha,详解,执行,方法,block
From: https://blog.51cto.com/u_15952281/6038419

相关文章

  • 腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)
    写在前面又有好久没更新小程序自动化测试框架Minium系列文章了,主要真的太忙,尽量做到每周一更吧,还请大家能够理解!上篇文章为大家分享关于Minium中Minium、App模块的API ......
  • left join(左连接)、right join(右连接)、full join(全连接)、inner join(内连接)、cr
    (1)leftjoin(左连接)在两张表进行连接查询时,会返回左表所有的行数据,右表中返回只返回和左表匹配的数据,没有的显示为Null。(2)rightjoin(右连接)在两张表进行连接查询时,会返......
  • OpenMP中For Construct对dynamic的调度方式详解
    前言在本篇文章当中主要给大家介绍OpenMpforconstruct的实现原理,以及与他相关的动态库函数分析,与forconstruct非常相关的是循环的调度方式,在OpenMP当中一共有四......
  • Spring事务传播行为详解
    前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为......
  • display:inline-block产生元素间空隙原理和解决方法
    写轮播图时偶遇一个排版问题,用inline-block会产生无法通过margin=0消除的空隙原理元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处......
  • Dijkstra算法详解(朴素算法+堆优化)
    定义Dijkstra(读音:/'daɪkstrə/)算法,是用来求解一个边带权图中从某个顶点出发到达其余各个顶点的最短距离的算法。(为表达简便,下文中“起点(源点)到某个顶点的距离”简称为“......
  • vue之.sync的详解
    vue之.sync的详解:https://blog.csdn.net/chenxi_li/article/details/118682708?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~d......
  • Python爬虫详解
    初识爬虫爬虫的概念什么是爬虫爬虫:通过编写程序,模拟浏览器上网,并抓取有价值的数据的过程反爬虫:门户网站通过制定相应的策略或技术手段,来阻止爬虫程序对其网站数据的爬......
  • Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)
    一、概述①缓存穿透:大量请求根本不存在的key(下文详解)②缓存雪崩:redis中大量key集体过期(下文详解)③缓存击穿:redis中一个热点key过期(大量用户访问该热点key,但是热点key......
  • Linux环境下:程序的链接, 装载和库[ELF文件详解]
    编译过程拆解预处理处理生成.i文件,.i文件还是源码文件将所有的宏定义#define展开。处理#if,#else,#endif等条件编译指令处理#include,原地插入文件cppHelloW......