专栏首页雨尘分享5.Block的内存管理 内存管理内存管理block的循环引用

5.Block的内存管理 内存管理内存管理block的循环引用

内存管理


无论当前环境是ARC还是MRC,只要block没有访问外部变量,block始终在全局区

MRC情况下

block如果访问外部变量,block在栈里

不能对block使用retain,否则不能保存在堆里

只有使用copy,才能放到堆里

ARC情况下

block如果访问外部变量,block在堆里

block可以使用copy和strong,并且block是一个对象

block的循环引用


如果要在block中直接使用外部强指针会发生错误,使用以下代码在block外部实现可以解决

__weak typeof(self) weakSelf = self;

但是如果在block内部使用延时操作还使用弱指针的话会取不到该弱指针,需要在block内部再将弱指针强引用一下

__strong typeof(self) strongSelf = weakSelf;

简单的说__weak 实现弱引用  就不会产生循环引用

__strong 能保证block内的对象不会提前释放掉

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Block 小结block  的 储存位置block  的循环引用

    陈雨尘
  • 4.Block的类型

    陈雨尘
  • 3. __block  __weak  __strong   这都是做什么的

    陈雨尘
  • 编译器 bug 系列(1)

    作为客户端开发者,我们每天都在接触编译器带来的便利,避免了手写机器码的麻烦,但是,某些情况下,编译器也会代码很多负面的作用。

    酷酷的哀殿
  • iOS block探究(一): 基础详解你要知道的block都在这里

    你要知道的block都在这里 转载请注明出处 https://cloud.tencent.com/developer/user/1605429 本文大纲 blo...

    WWWWDotPNG
  • Block 小结block  的 储存位置block  的循环引用

    陈雨尘
  • 【iOS】block小记

    VV木公子
  • iOS底层原理总结 - 探寻block的本质(一)

    xx_Cc
  • iOS block的一些理解和注意点

    大壮
  • 编码篇-Block里面的小天地

    Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。 通常来说,block都是一些简短代码片段的封装,适...

    進无尽

扫码关注云+社区

领取腾讯云代金券