Block注意点——避免调用空Block

前言

  • block实在是很强大的神器,回调的时候常常觉得这也行,真的很爽
  • 在写项目的时候遇到了block为空的问题,解决下来感觉对block的理解加深了很多

Block的构成

  • Block可以看作由两部分组成,一个是定义,调用,另一个是回调内容
  • 我们用block实现回调,本质上就是回调内容是写在前面的,但是我们实际调用是写在后面,这样子一个时间差就能帮我们做很多事情

我遇到的问题

项目问题

  • 我遇到的情况大概来说是要在一个ViewController上写了一个ViewA,而A上一个button点击后会出现新的ViewB,ViewB上有一个UIPickerView,而设置PickerView的Delegate和datasource都要设置在ViewController上
  • 而由于ViewB依附于ViewA建立,如果我们在初始化ViewA的时候就在ViewController里设置Delegate和datasource,由于那个时候PickerView还不存在,设置了也没什么用
  • 所以我希望的是,能够在PickerView初始化完的时候再进行设置,而在View的实现文件里无法点出ViewController了
  • IMG_0022

用Block解决

  • 因此这就是一个我最近遇到很好的能通过block回调特性解决的问题,因为回调的存在,我们可以将回调内容写在ViewController刚初始化ViewA的时候,而实际调用放在后面ViewB上的UIPickerView已经初始化完毕的时候

然鹅

  • 然而,显然并没有那么顺利的好事,在写的时候,我发现我的block回调是空的
  • 此时就是blcok中很常见的一个错误,回调内容没有写在调用前面
  • 因为我把blcok的调用直接写在重写的init方法里面,而为了使用这个block属性,我们先得保证View2已经初始化出来了,而按照我的写法此时block已经被调用了,这就使得blcok显示为空

解决

  • 解决方案就是把block调用和UIPickerView放出来写个单独的方法,在我们已经写完回调之后再初始化pickerView以及调用block
  • 这也可以总结下一般我们遇到问题时应该怎么办,就是一步一步设端点,找什么为空,找到为空的那个,解决这个问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值