iOS block代码块强引用问题
来源:互联网 发布:独立游戏开发者 知乎 编辑:程序博客网 时间:2024/06/06 00:38
block代码块在iOS开发中经常见到,例如AFN数据请求就是block,值得注意的是在block中不恰当的操作代码,会导致资源不被释放,导致内存泄漏,例如下面的数据请求:
__weak typeof(self) weakSelf = self;[SWHttpTool POST:setAvatarPath parameters:parameter success:^(id responseObject) { [weakSelf.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; // 通知我的页面更改用户头像 [[NSNotificationCenter defaultCenter] postNotificationName:@"SWUserInfoUpLoadIcon" object:nil]; } failure:^(NSError *error) { }];
在请求成功的代码块中调用了 [weakSelf.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]方法,注意用的是weakSelf而不是self,用弱指针去操作self,这样的话,就不会导致block强引用的问题。如果用的是self的话,就是在block中强指针引用控制器,控制器(self)又强引用block,这样的话会导致死循环引用,谁也不会被释放,当控制器POP掉的时候也不会被释放,因此导致内存泄漏,所以在使用block的时候,一定要注意强指针的使用。
如果要查看控制器释放被释放掉,可以重写dealloc方法,在方法中做一下测试就可以了。
- (void)dealloc{ NSLog(@"%s",__func__);}
dealloc方法是在控制器被销毁的时候调用的,可以用来测试控制器是否被销毁。
1 0
- iOS block代码块强引用问题
- Block 代码块中循环引用问题
- block强引用问题
- iOS 代码块Block
- iOS block代码块
- iOS代码块Block
- IOS 强引用的问题
- ios block循环引用问题
- ios block循环引用问题
- ios block循环引用问题
- ios block循环引用问题
- ios- block循环引用问题
- ios- block循环引用问题
- iOS block循环引用问题
- IOS Block 代码块使用 (一)
- IOS Block代码块的简单使用
- IOS Block代码块的简单使用
- IOS Block 代码块使用 (二)
- JQuery API Reference
- [算法练习]找到单向链表的中间节点
- jsp内容
- HDOJ 1420 Prepared for New Acmer(DP)
- c语言
- iOS block代码块强引用问题
- 利用Python爬虫,抓取淘宝MM照片
- node.js 学习笔记003 :使用superagent和cheerio实现简单网页爬虫
- 配置CPU caffe全过程总结
- android gen目录相关
- 转载/VMware Workstation环境下的Linux网络设置/适用于无线网络
- DLL注入相关
- SSH 整合关键配置文件
- 营销型网站特点