block中使用self,导致通知无法释放

  • 一键加油中,结算的时候选择油号,弹框的方法中,有个block,但是blcok中使用的self,导致了强引用的问题,返回上级页面的时候,不会走 dealloc 方法,也就是通知没有移除
  • 再到充值界面,支付的时候,会出现2次弹框,因为一键加油页面的通知没有移除
  • 【重现bug:进入一键加油页面,选择完油号就返回,这时是没有走dealloc的,通知没移除,再进入充值界面,执行支付后,会出现2次弹框】
  • 但是,如果在一键加油页面,选择完油号直接支付是没有问题的。
    弹框用的是单例,虽然上次的没有dealloc,但是再次进入一键加油的界面,当点了弹框会走dealloc,是否掉上次的controller,也就把上次多的那个通知移除了

因此,注意block中,不用忘记使用__weak self

  • 哪种block会引起强引用,
  • 例如弹框的block, 里面定义了一个strong类型的属性,接受传进来的block, 就会造成强引用,导致控制器不能释放
  • 但是封装的网络请求部分,拿到接受的block直接用了,那种情况可以不使用__weak

你可能感兴趣的:(block中使用self,导致通知无法释放)