Analyze heap memory

老生常谈:

  1. Instruments
    Allocation,查看具体内存使用情况。

  2. Memory Graph
    查看对象的关系。

  3. 使用 heap 命令查看 memgraph 文件

// 用法
heap --quite test.memgraph

Swift 相关:

  1. 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]
        
    }
}
正常

ref:https://developer.apple.com/videos/play/wwdc2024/10173/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容