xcode内存图不显示保留周期

标签 xcode swift4.2 retain-cycle memory-graph-debugger

我的快速代码如下。我在闭包中使用了 self,但是当我运行项目时,内存图没有显示保留周期。我错了,有一个保留周期?

class ViewController: UIViewController {

    private var counter = 0

    private var closure : (() -> ()) = { }

    func foo() {
        closure()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        closure = {
            self.counter += 1
            print(self.counter)
        }
    }

}

最佳答案

是的,Xcode并不总是直观地表示强引用循环。但它一致表明相关对象尚未被释放。

例如,如果我通过导航 Controller 推送并弹出,我会在事件对象列表中看到 ViewController,但是当我选择它时,看不到任何循环,而是看到一些神秘的图表,包括导航 Controller (即使我将其弹出):

enter image description here

话虽如此,我发现如果我以模态方式呈现并关闭有问题的 View Controller ,我会更清楚地看到循环:

enter image description here

如果我们能够看到原型(prototype)循环(如下所示),那就太好了,但是在处理 UIKit 对象时,情况并不总是那么简单。

enter image description here

关于xcode内存图不显示保留周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60618767/

相关文章:

xcode - 使用 Cocoa 接受参数并运行系统命令

ios - Swift 4.2 解包问题 (??)

快速内存管理 : Storing func in var

ios - 在 AFNetworking 成功 block 中保留循环

Swift 4.2 响应 Selector 返回 false,如何判断属性是否存在?

ios - 从weakSelf调用的方法中引用weakSelf会导致保留周期吗?

ios - 在 iOS 5 Storyboard 中,如何将新场景从 Popover 推送到原始 View Controller ?

ios - XCode5 assets目录的切片工具如何使用切片的图片

XCode 9.3 打破了 Playground

ios - 如何防止 UITableViewCell 在部分刷新时丢失其选择状态?