美文网首页
block内存管理和循环引用

block内存管理和循环引用

作者: 有理想有暴富的小青年 | 来源:发表于2017-12-08 00:01 被阅读29次

    block内存管理

    MRC: 在mrc中没有strong和weak;用copy修饰block;因为block刚刚声明出来的时候(没有引用外部的任何变量的时候是放在全局区global的),引用外部局部变量(包括_ _block修饰的局部变量)后放在栈区,引用外部全局变量或是静态变量后放在全局区;

    局部变量的对象(block生命在局部的话,就是局部变量对象)都是基本数据类型,都放在栈区,代码块过后便会销毁

    需要用copy 修饰block 是将block放到堆区

    ARC:用strong和copy一样;刚刚声明出来(没有引用任何变量)也是放在全局区,引用了外部的局部变量后放在堆区,引用外部全局变量或是静态变量后放在全局区;

    局部变量对象默认有一个强指针引用着 ,放在堆区


    block值传递和指针传递

    ARC中block引用了局部变量后,block内部是值传递,值已经传递到了block内部,block外部修改值,block内部的值是不会变化的,再次调用也不会变化的

    当使用_ _block修饰、static变量,全局变量时候 是指针传递,修改的是内存里面的值,是会改变的


    block循环引用和提前释放

    block内部需要使用_ _weak typeof(self) weakself = self;

    如果里面有延时操作的话需要用_ _strong typeof(self) weakself = self;

    因为block会对内部所有强指针变量进行强引用一次,延时的话weakself会销毁掉

    相关文章

      网友评论

          本文标题:block内存管理和循环引用

          本文链接:https://www.haomeiwen.com/subject/pmdsixtx.html