xcode - Swift 3 和 iOS 10 错误内存泄漏错误

标签 xcode memory-leaks swift3 ios10 xcode8

与 iOS 10 和 Swift 3 一起使用时,Xcode 8 中似乎存在(错误的)内存泄漏错误。

以下代码报告了 Instruments 和 Xcode 8 内存调试器中的内存泄漏:

class SomeClass: NSObject {
    var view: SomeView!

    deinit {
        print("SomeClass deinit")
    }
}

class SomeView: UIView {
    weak var reference: SomeClass?

    deinit {
        print("SomeView deinit")
    }
}

class ViewController: UIViewController {
    var someProperty: SomeClass?

    override func viewDidLoad() {
        super.viewDidLoad()

        let c = SomeClass()
        let v = SomeView()
        c.view = v
        v.reference = c

        someProperty = c
    }
}

最佳答案

我尝试了不同的变体来确认它确实是一个错误,我的发现是:

  • 当您不分配时 c在示例代码中为 someProperty ,两个实例都将在各自的 deinit 中打印字符串s。真正的强引用循环不会取消。
  • SomeClass不继承自 NSObject ,这个bug不会发生。
  • 使用 Swift 2.2 时,这不会发生。
  • 使用 iOS 9- 时,不会发生这种情况。
  • 曾经someProperty设置为 nil在代码的某处,两个实例都是 deinit编。 Xcode 8 内存调试器确认没有内存泄漏。然而,在 Instruments 中,这种变化并没有反射(reflect)出来——这是理所当然的,因为真正的内存泄漏可能不会得到解决。

  • 仅供引用,仅当它分配给 UIViewController 的属性时才会发生这种情况。 .我最初是在单例对象中发现这种行为的。

    关于xcode - Swift 3 和 iOS 10 错误内存泄漏错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886126/

    相关文章:

    swift - 基于 Swift 的应用程序可以在 OS X 10.9/iOS 7 及更低版本上运行吗?

    ios - 为什么这个与 UIGraphicsBeginImageContext 相关的函数中有微小的内存泄漏?

    asp.net - 遍历 !DumpHeap 输出以读取内存偏移量处的值

    swift - 如何使用按钮更改 NSCollectionView 的数据

    ios - 在 Xcode 中使用 Swift 编译时间极长

    xcode - 通过终端构建 xcode,使用 "build for profiler"设置

    linux - Docker 容器上的 ImageMagick 生成格式错误的 PNG 图像

    swift - 如何将图像从 UITableViewCell 传递到 UIImage

    ios - 从 swift 2.3 迁移到 swift 3 时出现问题

    Swift 泛型从数组中删除类实例