iOS内存优化

本文介绍了iOS应用中常见的内存管理问题及优化策略,包括如何使用NSZombieEnabled检测悬挂指针,通过Analyze工具静态分析内存泄漏,利用Leaks Instrument定位内存泄露,以及解决UITextField内存泄漏、CGMutablePathRef内存管理、NSTimer循环引用等问题。此外,还提到了图片加载的内存优化技巧和SDWebImage的配置建议。
摘要由CSDN通过智能技术生成

1、运行MemoryProblems后,运行崩溃出现EXC_BAD_ACCESS,启动NSZombieEnabled,选中Edit Scheme并点击,Run -> Diagnostics -> Enable Zombie Objects(悬挂指针的检测),设置完之后,再次运行和点击页面,虽然会再次crash,但这次控制台打印了有用信息,点击Continue program execution按钮继续运行,对比找到相同地址并修改(启动MallocStackLogging

常见原因:某变量被assign修饰,对变量值后,它的对象就马上释放,而变量也不是strong而是weak,此时仍然使用就会导致程序crash


2、手动静态分析:应用Product—>Analyze或捷键shift + command + b进行内存泄漏的初步检测

    自动静态分析:在Build Settings启用Analyze During 'Build',每次编译时都会自动静态分析


3、可以在xcode的build setting中打开implicit retain of ‘self’ within blocks,xcode编译器会给出警告,逐个排查警告


4、应用Leak Instrument进行内存泄露查找:点击Xcode的菜单栏的 Product -> Profile 启动Instruments,出现Instruments的工具集,选中Leaks子工具点击,点击红色圆点按钮启动Leaks工具,在Leaks工具启动同时,模拟器或真机也跟着启动,启动Leaks工具后,它会在程序运行时记录内存分配信息和检查是否发生内存泄露

首先点击Leak Checks时间条那个红色叉,点击红色叉后,下面显示Leaks By Backtrace,双击某行内存泄露调用栈,会直接跳到内存泄露代码位置

Leak Instrument有Cycles & Roots界面:Persistent Bytes和#Persistent。#Persistent是object的数量,也就是allocation的次数,而Persistent Bytes是具体的内存大小。#Persistent是我们需要关注的,内存有没有泄露也是看这个值是不是只增不减。

Allocations:启动Allocations,勾选列表最上边的,右边设置勾选:Discard unrecorded data upon stop、Identify virtual C++ objects、* isContain…Record 

列表勾选VM

Generation Analysis

这个功能是非常有用的,一般是这样用的:进入一个页面前mark一下,在退出这个页面的时候再mark一下可以比较哪些内容增加了,就可以具体分析哪些内存没有被释放


Call Tree:需要我们把列表展示类型切换成Call Trees,能够非常清晰的看到调用树

Separate by Category&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值