- 浏览: 2180734 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用。
本文假设你已经比较熟悉Obj-C的内存管理机制。
1、运行Demo。
先准备一个内存泄露的Demo吧:
在崩溃的地方断住了,知道crash的地方了,但是不知道具体crash的原因。
2、设置NSZombieEnabled
这是一个 “EXC_BAD_ACCESS”错误。我们打开XCode的选项:“NSZombieEnabled” 。在crash时可能会给你更多的一些提示信息。
设置步骤:1
2:勾上红色框里的
运行,按刚才的操作选中其中的cell。再次crash,这次在output窗口会看到多了一项错误信息:
2012-11-28 13:22:08.911 PropMemFun[2132:11303] *** -[CFString respondsToSelector:]: message sent to deallocated instance 0x713ebc0
大概意思是:向已释放的内存发送消息。也就是说使用了已释放的内存,在C语言相当于使用了“野指针”
看了下crash的这个语句,sushiString应该是没问题的,它是从stringWithFormat初始化出来的。那就是_lastSushiSelected的问题。
_lastSushiSelected指向了sushiString,sushiString是一个autorelease变量。 在第二次点击时,使用的是sushiString已经被释放,所以crash了。那为_lastSushiSelected保留一下,就可以用了。代码修改如下:
运行,这时候不崩溃。
3、分析内存泄露(shift+command+b)
app不crash了,那看看有没有内存泄露。用XCode的Analyze就能分析到哪里有内存泄露
分析之后可以看到:
这里提示alertView没被释放,有内存泄露,那我们释放
再分析,这个问题解决了。
4、使用Instruments的leaks工具
分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。那就需要用到Instruments了。
按上面操作,build成功后跳出Instruments工具,选择Leaks选项,这时候寿司程序也运行起来了,选中list中的项,拖动等操作后,工具显示效果如下:
大家可能都能猜到,红色的柱子表示内存泄露了。怎么通过这个工具看到在哪泄露了呢?
先在工具栏按下红色的圆形按钮,把工具监视内存的活动停下来。选择Leak,然后点中间十字交叉那,选择Call Tree
这时候左下角的Call Tree的可选项可以选了。选中Invert Call Tree 和Hide System Libraries,显示如下:
这时候内存泄露的具体代码找到了,在右边的红色框框里指定了哪个方法出现了内存泄露。
你只要在这些方法上双击,就会跳转到具体的代码,哈哈,是不是很方便。
这里应该是提示100%内存会泄露。
6、解决内存泄露问题
问题找到了,那就解决吧。
关于:tableView:didSelectRowAtIndexPath ,分析下它的内存过程:
sushiString变量通过autorelease创建,它的引用计数是1.
这行代码使得引用计数增加到2, _lastSushiSelected = [sushiString retain];
这个方法结束时,sushiString的autorelease生效了,这个变量的引用计数减少为1
当再次执行tableView:didSelectRowAtIndexPath这个方法时,_lastSushiSelected被赋值了新指针,老的_lastSushiSelected的引用计数还是1,没有被释放,产生了内存泄露。
怎么解决呢?
在_lastSushiSelected = [sushiString retain];之前把原来的release就ok了:
[_lastSushiSelected release];
_lastSushiSelected = [sushiString retain];
关于:tableView:cellForRowAtIndexPath
这个比较明显,sushiString被alloc和init之后就没有释放,可以用stringWithFormat来调用autorelease,代码如下:
NSString *sushiString = [NSString stringWithFormat:@"%d: %@", indexPath.row, sushiName];
好了,泄露都fix了,再用工具分析看看,这时候你再点,再拖,再怎么操作,都没有内存泄露了。表明内存泄露被堵住了。
本文假设你已经比较熟悉Obj-C的内存管理机制。
1、运行Demo。
先准备一个内存泄露的Demo吧:
在崩溃的地方断住了,知道crash的地方了,但是不知道具体crash的原因。
2、设置NSZombieEnabled
这是一个 “EXC_BAD_ACCESS”错误。我们打开XCode的选项:“NSZombieEnabled” 。在crash时可能会给你更多的一些提示信息。
设置步骤:1
2:勾上红色框里的
运行,按刚才的操作选中其中的cell。再次crash,这次在output窗口会看到多了一项错误信息:
2012-11-28 13:22:08.911 PropMemFun[2132:11303] *** -[CFString respondsToSelector:]: message sent to deallocated instance 0x713ebc0
大概意思是:向已释放的内存发送消息。也就是说使用了已释放的内存,在C语言相当于使用了“野指针”
看了下crash的这个语句,sushiString应该是没问题的,它是从stringWithFormat初始化出来的。那就是_lastSushiSelected的问题。
_lastSushiSelected指向了sushiString,sushiString是一个autorelease变量。 在第二次点击时,使用的是sushiString已经被释放,所以crash了。那为_lastSushiSelected保留一下,就可以用了。代码修改如下:
_lastSushiSelected = [sushiString retain];
运行,这时候不崩溃。
3、分析内存泄露(shift+command+b)
app不crash了,那看看有没有内存泄露。用XCode的Analyze就能分析到哪里有内存泄露
分析之后可以看到:
这里提示alertView没被释放,有内存泄露,那我们释放
[alertView release];
再分析,这个问题解决了。
4、使用Instruments的leaks工具
分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。那就需要用到Instruments了。
按上面操作,build成功后跳出Instruments工具,选择Leaks选项,这时候寿司程序也运行起来了,选中list中的项,拖动等操作后,工具显示效果如下:
大家可能都能猜到,红色的柱子表示内存泄露了。怎么通过这个工具看到在哪泄露了呢?
先在工具栏按下红色的圆形按钮,把工具监视内存的活动停下来。选择Leak,然后点中间十字交叉那,选择Call Tree
这时候左下角的Call Tree的可选项可以选了。选中Invert Call Tree 和Hide System Libraries,显示如下:
这时候内存泄露的具体代码找到了,在右边的红色框框里指定了哪个方法出现了内存泄露。
你只要在这些方法上双击,就会跳转到具体的代码,哈哈,是不是很方便。
这里应该是提示100%内存会泄露。
6、解决内存泄露问题
问题找到了,那就解决吧。
关于:tableView:didSelectRowAtIndexPath ,分析下它的内存过程:
sushiString变量通过autorelease创建,它的引用计数是1.
这行代码使得引用计数增加到2, _lastSushiSelected = [sushiString retain];
这个方法结束时,sushiString的autorelease生效了,这个变量的引用计数减少为1
当再次执行tableView:didSelectRowAtIndexPath这个方法时,_lastSushiSelected被赋值了新指针,老的_lastSushiSelected的引用计数还是1,没有被释放,产生了内存泄露。
怎么解决呢?
在_lastSushiSelected = [sushiString retain];之前把原来的release就ok了:
[_lastSushiSelected release];
_lastSushiSelected = [sushiString retain];
关于:tableView:cellForRowAtIndexPath
这个比较明显,sushiString被alloc和init之后就没有释放,可以用stringWithFormat来调用autorelease,代码如下:
NSString *sushiString = [NSString stringWithFormat:@"%d: %@", indexPath.row, sushiName];
好了,泄露都fix了,再用工具分析看看,这时候你再点,再拖,再怎么操作,都没有内存泄露了。表明内存泄露被堵住了。
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 612本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1087颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 976从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1132Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 983Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 827前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 911监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 788在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 921最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1306##MediaQuery MediaQuery.of(con ... -
Mac上制作Centos7系统U盘安装盘
2019-07-23 11:25 624Centos7 下载地址: https://www.cento ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1058当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 721setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1478问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 742底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1758点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1349import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2288TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1517一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 842Flutter最近很火,我抽出了一点时间对Flutter进行了 ...
相关推荐
使用 Xcode7 的 Instruments 检测解决 iOS 内存泄露 在 iOS 开发中,内存泄露是一个非常严重的问题。这篇文章将主要介绍使用 Xcode7 的 Instruments 中的 Leaks 检测解决 iOS 内存泄露的相关知识点。 一、内存泄露...
4. **调试技巧**:充分利用Xcode的性能分析工具(如Instruments)进行内存泄漏检查、CPU使用率监控,以及UI性能评估。 5. **错误调试**:当遇到运行时错误或警告时,查看Xcode的控制台输出和日志,可以帮助定位问题...
4. **性能分析**:Xcode 12增强了性能分析工具,如Instruments,帮助开发者定位和优化内存泄漏、CPU占用等性能问题。 5. **代码签名和自动配置**:Xcode 12简化了代码签名流程,自动处理许多配置问题,减少了开发者...
本文将深入探讨如何使用Xcode进行iOS 12.1(16B91和16B92)版本的真机设备调试,以及相关注意事项。 首先,Xcode是Apple官方提供的集成开发环境(IDE),用于开发macOS、iOS、watchOS和tvOS的应用程序。它包含了...
本文将深入探讨如何使用Xcode进行真机调试iOS 14.6版本的应用,包括安装与配置、设备连接、证书与配置文件、调试技巧以及常见问题解决。 首先,确保你已经安装了最新版本的Xcode,该版本应兼容iOS 14.6。Xcode可以...
首先,理解Xcode真机调试的概念:Xcode提供了强大的调试工具,如Instruments和LLDB,这些工具可以帮助开发者定位代码中的问题、监控性能和调试内存泄漏。真机调试则是在实际运行iOS系统的设备上运行应用,相比于...
在iOS开发过程中,Xcode是苹果官方推荐的集成开发环境(IDE),用于编写、测试和调试iOS应用程序。本文将深入探讨“xcode 真机调试包 ios11.0”这一主题,涵盖Xcode的基本功能、真机调试的重要性、iOS 11.0系统特性...
通过Xcode的调试工具栏,你可以控制应用的执行流程,设置断点,查看变量值,以及分析内存和CPU的使用情况。 此外,Xcode 11.3还提供了强大的Interface Builder,让开发者可以直接在设计视图中构建用户界面,而无需...
通过真机调试,开发者可以直接在设备上观察这些问题,利用Xcode的调试工具进行诊断,例如用 Instruments 进行内存和CPU性能监控,或用Leak检测内存泄漏。 总之,"Xcode9 真机调试iOS11.1”是一个iOS应用开发的关键...
- **Instruments**:一套性能分析工具,用于检测内存泄漏、CPU使用率、网络活动等问题。 - **Console**:显示应用程序的输出日志,有助于诊断运行时错误和警告。 总之,利用Xcode 11.6和“iOS13.6 真机调试包.zip”...
在iOS开发中,内存泄漏是常见...理解并掌握上述知识点,能有效帮助开发者在实际项目中避免和解决内存泄漏问题。通过深入研究AsyncImageTableviewDemo,可以进一步巩固对这些概念的理解,并提升iOS应用的性能和稳定性。
为了有效地识别和解决内存泄漏问题,iOS开发者可以利用Xcode自带的工具进行分析和调试。以下是两种查看和调试iOS内存泄漏的方法: 一、利用Xcode查看内存泄漏 Xcode提供了一个静态分析工具,可以在代码编译阶段...
在iOS开发过程中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、测试和调试iOS应用程序。这个“ios12.0 xcode真机调试包”似乎是一个针对iOS 12.0版本的特殊配置或更新,允许开发者在真实设备上进行应用的...
5. 使用Instruments:Xcode的Instruments工具提供了一系列性能分析工具,可以帮助你检测内存泄漏、CPU使用率等问题,优化应用性能。 六、持续测试和更新 随着应用的迭代,开发者需要不断在iOS 10.2设备上进行测试,...
在调试过程中,Xcode提供了强大的调试工具,如LLDB调试器、Instruments性能分析工具、View Debugging和Activity Monitor等。这些工具可以帮助开发者查找和修复代码中的错误,优化性能,以及检查内存泄漏等问题。 总...
7. **调试工具**: Xcode内置了强大的调试工具,如LLDB(Low Level Debugger)和Instruments,可以帮助开发者定位代码错误、性能瓶颈和内存泄漏等问题。真机调试环境下,这些工具能提供更为准确的反馈,因为它们直接...
4. 内存泄漏:使用Instruments工具检测并修复内存泄漏问题。 总结,Xcode 11.3真机调试包为开发者提供了一个高效、全面的调试环境,通过熟练掌握其使用,开发者能够更好地优化代码,提高应用的质量和用户体验。无论...
在iOS开发过程中,Xcode是苹果官方提供的集成开发环境(IDE),用于编写、测试和调试iOS及macOS应用。这个“xcode 真机调试包 ios11.1”显然是针对Xcode的一个特定版本,专门用于在运行iOS 11.1系统的设备上进行真机...