老生常谈:
Instruments
Allocation,查看具体内存使用情况。Memory Graph
查看对象的关系。使用 heap 命令查看 memgraph 文件
// 用法
heap --quite test.memgraph
Swift 相关:
- Closure
使用方法进行赋值,必然造成,原因是,方法隐士的使用了 Self
class Test {
var ccc: (() -> Void)?
init() {
// 循环引用
self.ccc = closure
}
func closure() { // [self]
}
}

循环引用
使用内部方法:
嵌套方法不使用 self
class Test {
var ccc: (() -> Void)?
init() {
func run() {
}
// 嵌套方法
self.ccc = run
}
func closure() { // [self]
}
}

嵌套方法
嵌套方法使用 self
class Test {
var ccc: (() -> Void)?
init() {
func run() {
print(self)
}
// 嵌套方法
self.ccc = run
}
func closure() { // [self]
}
}

嵌套方法
总结,嵌套方法,没有隐士变量 self,但是如果在里面使用 self,和就会捕获上层的 self,所以同样不要这样对 Closure 赋值。
常规的就不多说了
class Test {
var ccc: (() -> Void)?
init() {
// 正常使用方式
self.ccc = { [weak self] in
}
}
func closure() { // [self]
}
}

正常