Block引用全局变量处理(内存泄露问题)
来源:互联网 发布:织梦html5响应式模板 编辑:程序博客网 时间:2024/06/13 10:28
Block正确的写法:往后只要是引用了全局的变量等,全部变成弱指针**************************************************************************************************Block的写法:往后在使用Block的时,如果引用了BLock外部的变量,一定将这个变量更换*在原始变量的基础上加上: __unsafe_unretained或者__weak*eg: self 可以写成: __unsafe_unretained FLShareViewController *share = self;不推荐*或者写成: __weak FLShareViewController *share = self;不推荐*写成: __weak typeof(self) share = self;推荐,用不了就用第一种*************************************************************************************************Block的内存泄露:在设置界面里面,有一个回调的Block,而在这个Block中会引用外部的属性,而Block是copy类型,但是又因为引用了全局的强引用,如使用了self这种写法,回头controller消失了,但造成了dealloc生命周期方法不会调用,造成了互相引用,因此会造成内存的泄露解决的办法是:不用采用强指针那怎么才能不使用强指针的self///////////////////////////////////////////////////////////////代码:不推荐 __unsafe_unretained FLShareViewController *share = self; FLSettingItem *itemSms = [FLSettingArrowItem itemWithIcon:@"MailShare" title:@"短信分享" destVcClass:nil]; itemSms.option = ^{ /** * 将内部所有使用self的地方都改成使用share */ [share ]; };///////////////////////////////////////////////////////////////代码:不推荐 __weak FLShareViewController *share = self; FLSettingItem *itemSms = [FLSettingArrowItem itemWithIcon:@"MailShare" title:@"短信分享" destVcClass:nil]; itemSms.option = ^{ /** * 将内部所有使用self的地方都改成使用share */ //[share ...]; };///////////////////////////////////////////////////////////////推荐: __weak typeof(self) share = self; FLSettingItem *itemSms = [FLSettingArrowItem itemWithIcon:@"MailShare" title:@"短信分享" destVcClass:nil]; itemSms.option = ^{ /** * 将内部所有使用self的地方都改成使用share */ //[share ...]; };///////////////////////////////////////////////////////////////
0 0
- Block引用全局变量处理(内存泄露问题)
- Android内存泄露问题(一)之context的引用
- 全局变量与内存泄露
- ffmpeg 手动添加 sps pps(处理内存泄露问题)
- 关于block的回调使用-防止内存泄露问题
- block中用到self要特别注意内存泄露问题
- block回调使用-防止内存泄露问题
- CGBitmapContextCreateImage(bitmap) 内存泄露问题处理
- WebView内存泄露问题的处理
- Block的内存泄露体现
- ios开发之使用block引发循环引用导致内存泄露
- iOS内存管理(4)--Block属性用copy修饰 & 避免循环引用的问题
- IOS Block循环引用的内存泄漏问题
- block块中引用成员变量引起内存泄漏问题
- Android 处理内存泄露
- block循环引用问题
- block强引用问题
- block循环引用问题
- 应用间跳转
- vs2010 无法进入断点调试
- 使用Apache的ab工具进行压力测试
- Maven实战(六)——Gradle,构建工具的未来?
- 启动Hadoop HDFS时的“Incompatible clusterIDs”错误原因分析
- Block引用全局变量处理(内存泄露问题)
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
- Html.ActionLink带参数
- typeof()
- android发送/接收json数据
- 【SQLite】常用操作SQL及压缩SQLite的实例代码
- 2015-03-19-python核心编程(四)Python数字
- JDK,JRE,JVM区别与联系
- LoadRunner 压力测试