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 条评论
登录 后参与评论

相关文章

来自专栏冰霜之地

神经病院Objective-C Runtime住院第二天—消息发送与转发

现在越来越多的app都使用了JSPatch实现app热修复,而JSPatch 能做到通过 JS 调用和改写 OC 方法最根本的原因是 Objective-C 是...

15330
来自专栏aoho求索

Java SPI机制详解

36020
来自专栏DOTNET

【翻译】MongoDB指南/引言

【原文地址】https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1...

28760
来自专栏技术总结

iOS进阶之传递消息

20060
来自专栏瞎说开发那些事

[Java并发系列]Java并发容器和框架

24440
来自专栏Java 技术分享

Struts2 转换器

13220
来自专栏向治洪

Google protocol buffer简介

Google Protocol Buffer Google Protocol Buffer又简称Protobuf,它是一种很高效的结构化数据存储格式,一般用于结...

35760
来自专栏Android 研究

Retrofit解析5之代理设计模式

即Proxy Pattern,23种常用的面向对象软件设计模式之一。(设计模式的说法源自<设计模式>一书,原名<Design Patterns:Elements...

15030
来自专栏java思维导图

Java 10 已发布!时隔 6 月带来 109 项新特性

关键时刻,第一时间送达! 期待已久,没有跳票的 Java 10 已正式发布! ? 为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为了每六个月一次...

30070
来自专栏一个爱瞎折腾的程序猿

nodejs常用代码片段

调用:node index.js --target test 接收:const config=loadConifg(['target'],'--') //co...

14720

扫码关注云+社区

领取腾讯云代金券