在网上搜关于block的知识都不是特别详细,在这里对block做一个详细的描述,从入门开始到满足日常大部分开发需要。
block定义:block说白了就是一段代码块,提前存储一段代码,想要执行存储的那块代码,调用一下就执行,用于回调。和函数作用差不多,但是比函数更加灵活,可以在方法体外定义为全局,也可以在方法体内部定义为局部,但是函数不行只能在方法体外定义为全局,block块更加灵活。话不多说,直接上代码,刚写的Demo,描述与截图供大家就爱神理解。
block入门:
1.block块内部有时候会引用块外部局部变量,块内部局部变量值变化了,不会影响外部局部变量的值。但是加上关键字__block情况就相反了。
2.block块内部有时候会引用块外部的全局变量,情况会和加上__block的结果一样。不过这里引用全局变量会出现循环引用的问题。
在这里附上具体出现循环引用的解决办法。
block的定义:
第一种是用 typedef 第二种是直接定义作为一个属性 这样block块可以夸区域,在不同的类之间进行传递调用,
具体解释区别如下图解释:
block进阶
将block块作为一个参数在类之间传递,并且block块内部包装了一个方法,当从类A传递到B之后,在B中创建一个对应类型的属性block去接受,在适当的时候去触发执行,这个例子在日常开发中也会常遇到。具体操作看截图
在storyboard自带的biewController中写一个testhaha的方法,并且在Main.storyboard中加赠一个跳转按钮的方法,点击跳转进入testViewController,并testVC的带block参数的方法,将来testhaha方法传递到testVC页面
在testVC中会有一个同类型的block区接受传过来的block参数(内部包有testhaha方法),在需要的时候去调用执行
在testVC界面上又一个触发block方法命名的按钮(方法名是trigger ),点击之后会触发本地保存的block去执行,释放代码块执行testhaha方法
这样在testVC界面点击了触发block方法按钮,就会执行testVC方法 输出
第二个关于进阶要讲解的就是返回参数的操作,在这里不做过多讲解,就是后几张图中加//注释的部门,并附有结束说明,给大家留个练习题,研究一下 ~@^@~
block作为参数传递的一些心得体会:
下面图1在红框[testVC ]左边应该加上 上面一行int b = 来接收·~因为这个带有block参数的方法,返回值是int
标签:testVC,定义,testhaha,详解,执行,方法,block From: https://blog.51cto.com/u_15952281/6038419