首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3& iOS 10错误内存泄漏错误

Swift 3& iOS 10错误内存泄漏错误
EN

Stack Overflow用户
提问于 2016-10-06 01:30:55
回答 2查看 1.1K关注 0票数 5

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

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

代码语言:javascript
复制
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
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 01:30:55

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

  1. 当您不将示例代码中的c分配给someProperty时,两个实例都会在各自的deinit中打印字符串。真正的强引用周期不会出现。
  2. SomeClass不从NSObject继承时,这个bug就不会发生。
  3. 当使用Swift 2.2时,这种情况不会发生。
  4. 当使用iOS 9-时,这种情况不会发生。
  5. 一旦someProperty在代码中的某个位置被设置为nil,两个实例都是deinit编辑的。Xcode 8内存调试器确认没有内存泄漏。然而,在“仪器”中,这种变化并没有得到反映--这是正确的,因为真正的内存泄漏可能无法得到解决。

FYI,这不只是当它被分配给UIViewController的属性时才会发生。我最初在一个单例对象中发现了这种行为。

票数 3
EN

Stack Overflow用户

发布于 2017-01-25 10:07:12

似乎修正了iOS 10.3 (第一个测试版)和Xcode 8.3 (第一个测试版)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39886126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档