??????????Block基本使用
block最基本的使用方式,创建 — 调用.
这里的block类型:void(^)() —> 无返回值 无参数
三种创建block的方式,最常用的是方式三.
inlineBlock:快速生成block代码.
block作用:保存一段代码,并不是马上执行,需要手动调用
??Block使用场景(简单阐述)
定义cellItem模型,声明一个block属性
实现快速生成模型类方法
在目标控制器取出模型并初始化数据
当点击cell时,执行block中的代码
????????Block传值
代理,block都可以用来传值.
在viewController控制器中,点击屏幕时会触发该方法,此时使用的是block方法来包装代码传值,
不过,此时的block中并没有值,执行下一句,modal出控制器modalVc
在modal控制器中,点击事件触发,将block传给代理控制器,实现传值(逆传)
????Block内存管理[面试]
1??. 内存管理[MRC]
2??. 内存管理[ARC]
????Block循环引用
1??.简单演示
运行结果:打印为null,因为是弱引用,控制器会被销毁.
2??.复杂演示
??Block变量传递
如果block访问外部局部变量没有被任何关键字修饰,都是值传递
block访问外部变量被__block,static修饰,指针传递
访问的全局变量,也是指针传递
??Block开发使用场景
Block开发使用场景(参数使用):
什么时候使用Block充当参数?
思想:封装一个功能,这个功能做什么事情由外界决定,
但是什么时候调用由内部决定,这时候就需要把Block充当参数去使用.
怎么去把block充当参数?实战
比如:封装一个计算器,怎么计算由外界决定,什么时候计算由内部决定
??编程思想:
链式编程思想:把方法调用通过点语法链接,可读性非常好
// 实战:能看懂
// 实战:封装一个计算器,提供一个加法方法
返回一个block