Block循环引用进行弱处理
来源:互联网 发布:淘宝怎么看总销售额 编辑:程序博客网 时间:2024/05/16 14:00
Block中的循环引用问题
由于我们很多行为会导致Block的copy,而当Block被copy时,会对block中用到的对象产生强引用(ARC下)或者引用计数加一(non-ARC下)。
如果遇到这种情况:
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"下载图片 %zd",indexPath.row); if (indexPath.row > 5) { [NSThread sleepForTimeInterval:2]; }// 加载图片 NSURL *url = [NSURL URLWithString:app.icon]; // 接收二进制数据 NSData *data = [NSData dataWithContentsOfURL:url]; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ // 图片下载完成了 // 清除下载操作 [self.operationCache removeObjectForKey:app.icon]; UIImage *image = [UIImage imageWithData:data]; // 转成图片 // cell.iconView.image = image; // 把图片保存到模型中去 app.image = image; // 下载完图片,不需要直接设置image. reloadData // 去除了image跟cell 的关系 [Self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft]; }]; // NSLog(@"%@",data); }];对象有一个Block属性,然而这个Block属性中又引用了对象的其他成员变量,那么就会对这个变量本身产生强应用,那么变量本身和他自己的Block属性就形成了循环引用。在使用block前增加一句对self弱引用(以下),再讲block里的self全替换成weakSelf,也可以对self对象进行retain掉
__weak typeof(self) weakSelf = self;记得包工头的教训: 使用block要注意了!~循环引用 block中使用属性 -> self.属性名,只要block中出现 self 就应该检查
0 0
- Block循环引用进行弱处理
- 详解Block: block循环引用
- Block的循环引用
- block循环引用
- Block的循环引用
- block 防止循环引用
- block循环引用问题
- 循环引用的block
- block的循环引用
- block循环引用
- block循环引用问题
- block循环引用
- Block的循环引用
- Block的循环引用
- block循环引用问题
- BLOCK循环引用
- block的循环引用
- block的循环引用
- javascript学习记录
- htmlparser解析网站时服务器返回的文件编码和页面编码不一致问题
- adrci 问题打包
- android_ScrollView 监听滚动到某个位置的方法
- JAVA中的内省
- Block循环引用进行弱处理
- unity5之代码给fbx动作剪辑加事件
- forward和redirect区别
- android充当server服务器
- 硬件加速
- SAS ARIMA 模型
- Java张孝祥视频 学习笔记 代理
- centos7网络设置静态ip
- Flex异步调用小结