zoukankan      html  css  js  c++  java
  • ARC下的block导致的循环引用问题解析

    ARC下的block导致的循环引用问题解析

    更详细细节请参考 http://blog.sina.com.cn/s/blog_8c87ba3b0101m599.html

    ARC下,copy到堆上的block,会强引用进入到该block中的外部变量.这很容易导致循环引用的问题.

    比方说:

    一个VC(这里指一个controller)中有一个属性为model.VC强引用了它.

    VC --> model

    这个model呢,里面有一个copy属性的block,该block赋值如下如下.model.demo = ^{

        ......

    };

    如果这个......没有传VC进来,还好,不会强引用VC,如果是下面的情况:

    model.demo = ^{

        ......

        [test getValue:self];

    };

    那,直接导致的后果就是,这个model强引用了这个VC.

    model --> VC

    这就造成了一个循环.即使这个VC被pop掉了,垃圾回收机制也无法释放这个VC了,因为,它检测到了这个VC被model强引用了.

    所以,在ARC下面使用block,无论怎样,你都需要注意这几点:

    1.  外部对象进入block,请使用__weak修饰后再进入到block中

    2.  不要在block中初始化对象,请在block的外面初始化对象后再进入到block中去

    3.  无论该block是不是copy的,请都当做copy的block来处理

    4.  传入到堆区block中的对象会被强引用

     
  • 相关阅读:
    015_stdc_C语言
    014_stdc_C语言
    013_stdc_C语言
    012C语言
    011_stdc_C语言
    010_stdc_C语言
    009_stdc_C语言
    008_stdc_C语言
    40.委托
    39.多线程
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3696031.html
Copyright © 2011-2022 走看看