如何查找内存泄露

栏目: IOS · 发布时间: 6年前

内容简介:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 -- 百度百科

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 -- 百度百科

1.内存泄露原因

1. 使用的 Timer ,并且 Timer 的 target 为 self
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer(_ :)), userInfo: nil, repeats: true)
解决方式: 在需要释放 self 时调用 Timer 的 invalidate
2. 两对象的互相强引用 (一般出现在delegate,所以 delegate 要用 weak 修饰)
class A {
    var b: B
}
class B {
    var a: A
}

let a = A()
let b = B()
a.b = b
b.a = a
两者互相强引用谁都释放不掉
解决方式: a 或 b 其中一个用 weak 修饰 
weak var a: A
3. 闭包内部的强引用 (循环引用)

class A {
    var avtion: (()->())?
}
class B{
    var a: A = A()
    func xx(){
        a.action = {
            self.xxx//(使用 self 做了一些操作)
        }
    }
}
解决方式:
使用[weak self] 或者 [unowned self] 来避免循环引用
a.action = { [weak self] in
    guard let `self` = self else {return}//(黑魔法,闭包内可以继续使用 self )
}
unowned修饰类似于 OC 中的 assign,self 指向的是当前对象的地址,如果对象已经释放这个 self 不会自动置为 nil,此时一定要确保 self 没有释放,否则会有野指针的错误.
复制代码

2.查找内存泄露的方法

1. 静态分析(预防针):
在 Xcode 菜单栏点击 Product 选择 Analyze (Command + Shift + B)
Xcode 会分析可能会造成泄露的语句
(Swift 的项目没有跑出来泄露的,就用 OC 的项目看吧)
复制代码
如何查找内存泄露
2. 内存泄露分析工具Leaks
Product => Profile(Command+I) => Leaks
点击左上角像录制一样的按钮 开始检测
复制代码
如何查找内存泄露
3. Debug Memory Graph
复制代码
如何查找内存泄露
在后台输出框的查看层级按钮旁边
如果我们已经知道某个对象没有释放(比如 controller pop没有释放掉)可以通过这个方式查看究竟是被谁强引用了.
复制代码
如何查找内存泄露
4. 人工检索(笑)
在知道没有释放掉的控制器中 Command + F  搜索 self,然后 检索下是不是在 block 中有你不小心使用的 没有 weak 处理的 self 吧.简单暴力傻瓜式(事了拂衣去,深藏身与名)复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Open Data Structures

Open Data Structures

Pat Morin / AU Press / 2013-6 / USD 29.66

Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器