zoukankan      html  css  js  c++  java
  • iOS之ARC下的Block

    ARC的特性

      ARC下,所有NSObject类型指针,

      1. 默认为__strong类型

      2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil

      3. __autorelesing类型用于inout参数类型

      ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用。例如:

      return pObject;

      编译器会帮我们扩展为 return [pObject autorelease];

      ARC下,不能显式release,可以使用将值赋为nil来让编译器为我们release。

    ARC与Block

      Block的生命周期管理非常的微妙,与ARC混在一起后,更加复杂。

      当Block延stack向上(up)传递的时候,直接返回,编译器会添加[[ copy] autorelease]代码。

      当Block延stack向下传递给需要retain的容器的时候,需要显式的调用[^{} copy]方法。

      在ARC下,__block修改的NSObject指针依然会被retain。

      在ARC下,一个block内引用一个对象的实例变量后,self会被retain,所以极易造成strong reference cycle,可以通过__weak指针来避免这种情形,因为ARC不会为__weak指针retain。

      

  • 相关阅读:
    ubuntu18安装net-snmp
    virtual box安装ubuntu系统 ping通 && xshell可以连接
    高中操场所见所思
    如何写好研究生开题报告
    在加州考驾照
    一个软件工程项目竞赛网站
    结对项目总结
    喜马拉雅随车听开通啦
    裘老师赠书
    推荐博客链接
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2478601.html
Copyright © 2011-2022 走看看