Block的Retain Cycle的解决方法
2024-09-06 08:11:03
一个使用Block语法的实例变量,在引用另一个实例变量的时候,经常会引起retain cycle。这个问题在使ASIHTTPRequest的block语法的时候会时不时的碰到。这个问题困扰了我这个小白很久。终于有一天,在Advanced Mac
OS X Programming上,看到了这个问题的解决方案。
先用代码描述一下症状:
1 |
|
Xcode在编译以上程序的时候会给出一个警告:Captureing ‘self’ strongly in this block is likely to lead to a retain cycle。原因是_items
实际上是self->items
。_block
对象在创建的时候会被retain
一次,因此会导致self
也被retain
一次。这样就形成了一个retain
cycle。
解决方法就是,创建一个本地变量blockSelf
,指向self
,然后用结构体语法访问实例变量。代码如下:
1 |
|
这么修改之后,blockSelf
是本地变量,是弱引用,因此在_block
被retain
的时候,并不会增加retain
count,所以retain cycle就解除了,Xcode也不再出现警告了,问题解决。
注:本文并非原创,详情请参阅Advanced Mac OS X Programming,第92页“Block Retain Cycles”。
(全文完)
最新文章
- python列表副本
- Leetcode: Sequence Reconstruction
- 怎样获取Windows平台下SQL server性能计数器值
- CGFloat Float 互转
- ::before/:before和::after/:after的使用
- SVG 2D入门10 - 滤镜
- hihocoder 1037 数字三角形
- Java学习笔记(一):数据类型与变量
- 【排障】编译安装Mysql并使用自启动脚本mysqld后报错
- Linux进程和进程边界
- HTTP协议探析
- ZOJ2402 Lenny's Lucky Lotto List 简单DP
- CNN网络架构演进
- 算法:快速排序实现 &; 定制比较函数
- mysql恢复备份错误:Got a packet bigger than 'max_allowed_packet' bytes
- 傅立叶级数(Fourier Series)和周期现象
- springboot利用MockMvc测试controller控制器
- leetcode-78-子集(用bfs解决)
- Setup Factory 读取安装包的配置文件
- 维纳滤波和编码曝光PSF去除运动模糊【matlab】