zoukankan      html  css  js  c++  java
  • __block与__weak的真正区别

    其实这个问题在现在来说主要就是2个区别:

    • block下循环引用的问题

      • __block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil
      • __weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong
        的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题
    • __block与__weak功能上的区别。

      • __block会持有该对象,即使超出了该对象的作用域,该对象还是会存在的,直到block对象从堆上销毁;而__weak仅仅是将该对象赋值给weak对象,当该对象销毁时,weak对象将指向nil;
      • __block可以让block修改局部变量,而__weak不能。

    另外,MRC中__block是不会引起retain;但在ARC中__block则会引起retain。所以ARC中应该使用__weak。

  • 相关阅读:
    php——验证身份证是否合法的函数
    php——离线执行任务
    代码整洁之道
    js自适应屏幕高度
    SSH Junit4测试
    Java Persistence with Hibernate
    SSH搭建
    js整理
    Hibernate 应用
    对学习的一点感想
  • 原文地址:https://www.cnblogs.com/pioneerMax/p/6553642.html
Copyright © 2011-2022 走看看