虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在。所以了解原理很重要。
这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用。
本文假设你已经比较熟悉Obj-C的内存管理机制。
实验的开发环境:XCode 4.5.2
1、运行Demo。
先下载一个实现准备好的内存泄露的Demo吧:leak app
下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷。试着选择里面的几行,应该是选第二行的时候就崩溃了。崩溃截图:
在崩溃的地方断住了,知道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保留一下,就可以用了。代码修改如下:
- <span style="font-size:14px;"> _lastSushiSelected = [sushiString retain];
- </span>
运行,这时候不崩溃。
3、分析内存泄露(shift+command+b)
app不crash了,那看看有没有内存泄露。用XCode的Analyze就能分析到哪里有内存泄露
分析之后可以看到:
这里提示alertView没被释放,有内存泄露,那我们释放
[alertView release];
再分析,这个问题解决了。
相关推荐
MLeaksFinder通过集成Xcode的Instruments工具,以及使用Runtime技术和Block来追踪可能的内存泄漏。它会在每个页面的生命周期结束时,检查并报告任何未释放的对象。特别是对于那些在页面生命周期中创建但在页面销毁后...
在iOS开发中,内存泄漏是常见的问题之一,它会导致应用消耗过多内存,影响性能,甚至导致应用崩溃。本文将深入探讨“iOS内存泄漏调试工程”中的核心知识点,并以提供的AsyncImageTableviewDemo为例进行讲解。 1. **...
iOS Instruments是一个性能分析工具,它被广泛用于开发iOS应用,帮助开发者优化应用的性能,特别是对于内存、CPU、网络和图形渲染等资源的使用情况。从提供的文件信息来看,该文件是一份iOS Instruments的用户指南,...
针对这种情况,我们可以借助开源项目——HeapInspector-for-iOS来实现无需Instruments的内存泄露检测。 HeapInspector-for-iOS是一个专门用于检测iOS应用内存泄露的开源工具,它提供了一种替代Instruments的解决...
内存泄漏是iOS开发中的一个常见问题,它会导致应用的可用内存逐渐减少,最终可能导致应用崩溃或系统资源耗尽。为了有效地识别和解决内存泄漏问题,iOS开发者可以利用Xcode自带的工具进行分析和调试。以下是两种查看...
虽然iOS5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在。所以了解原理很重要。这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的...
"crash调试"这部分可能涉及如何识别和解决由于内存问题导致的应用崩溃,这通常需要用到Xcode的调试工具,如Instruments,来分析内存分配和泄漏。 "反汇编"是另一个关键标签,它意味着这份资料可能深入到代码的底层...
使用 Xcode7 的 Instruments 检测解决 iOS 内存泄露 在 iOS 开发中,内存泄露是一个非常严重的问题。这篇文章将主要介绍使用 Xcode7 的 Instruments 中的 Leaks 检测解决 iOS 内存泄露的相关知识点。 一、内存泄露...
为了应对内存泄漏,书中可能会介绍各种检测和预防的技巧,例如使用Instruments工具来分析内存使用情况,并找到潜在的内存泄漏点。 除了内存泄漏,优化内存的使用也是书中的一大主题。这包括理解自动引用计数...
* using Instruments 工具来检测内存泄漏 * 使用 ARC 或 MRC 机制来管理内存 * 手动释放对象 * 避免循环引用和死循环 结论: 内存泄漏是 IOS 开发中常见的问题,导致程序性能和稳定性下降。解决内存泄漏问题需要...
- 使用Instruments工具进行定期的手动内存泄漏检查。 - 对象生命周期管理遵循“谁创建,谁负责”原则。 - 尽量减少强引用,避免不必要的全局和静态对象。 - 定期进行代码审查,查找潜在的内存泄漏隐患。 总之,...
内存泄漏是iOS应用性能下降的常见原因,Swift-OOMDetector具有强大的内存泄漏检测机制。它能够定位到可能导致内存泄漏的代码行,帮助开发者快速定位问题。通过对内存泄漏的定期检查,开发者可以及时修复内存泄漏问题...
苹果提供了一套强大的工具——Instruments,其中的Leaks工具可以帮助开发者检测内存泄漏,Time Profiler工具可以分析应用的性能瓶颈,Memory Monitor可以监控应用的实时内存使用情况。通过这些工具,开发者可以及时...
1. 工具辅助:许多开发环境提供了专门的工具来检测内存泄露,如iOS的Instruments,Android Studio的Memory Profiler等。这些工具可以帮助开发者跟踪内存分配和释放,发现异常行为。 2. 代码审查:定期进行代码审查,...
7. **内存泄露检测**:利用Xcode内置的Instruments工具进行内存泄漏检测,及时发现并修复潜在的问题。 总的来说,iOS中的内存管理是开发者必须熟练掌握的重要技能。遛狗原则确保了对象的正确释放,自定义数组的内存...
在iOS开发中,UIWebView是用于展示网页内容的重要组件,但它...持续关注内存监控,分析内存泄漏,也是优化过程中不可或缺的一环。在实际开发中,结合Instruments工具进行内存分析,可以帮助我们找到问题并及时解决。
instruments是iOS开发中一个非常有用的工具,可以用来检测内存泄露和循环引用。 iOS内存管理是一个非常复杂的主题,需要开发者具备深入的知识和经验。开发者需要了解MRC和ARC的区别,强引用和弱引用的概念,循环...
本文将深入探讨如何使用开源项目"PLeakSniffer"来快速定位和解决iOS项目中的内存泄露。 **PLeakSniffer** 是一个专为iOS开发者设计的开源工具,它能够自动化地检测和分析iOS应用的内存泄露。该项目主要基于Xcode...