【问题标题】:Questions about Memory Management in Swift关于 Swift 内存管理的问题
【发布时间】:2018-12-03 10:59:28
【问题描述】:

我刚开始学习内存管理,我有一些问题。

我正在实现一个自定义相机

var captureSession = AVCaptureSession()
  1. 我是否需要对此进行弱引用 (weak var captureSession = AVCaptureSession()),或者一旦我移动到另一个不使用上述资源的视图控制器,它是否会自动解除分配? 我目前正在停止 viewDidDisappear

  2. 中的 captureSession
  3. 在以下任务中添加weak self 将获得什么好处?

    URLSession.shared.dataTask(with: url!) { [weak self](data, response, error) in {
    
    }
    
  4. 我通常会在文本字段中添加各种观察者,网络检查 并在viewDidDisappear 中删除它们。它们是从内存中完全释放,还是我必须在此之上做一些额外的事情?

【问题讨论】:

    标签: ios swift automatic-ref-counting


    【解决方案1】:

    1. AVCaptureSession:

    不要为您的captureSession 变量设置弱,因为没有保证。因为您的captureSession 将在不使用时随时释放。另外我建议你在viewWillDisappear 函数中停止你的captureSession

    了解更多关于弱、强等here

    2。 weak self 在块中:

    当你的完成块被其他一些对象持有时,你应该避免强引用循环。因此,您应该使用 weak self 来完成此类完成块。

    更多信息请参考post

    3.观察者:

    如果您忘记对您的班级执行removeObserver,即使您重新启动同一个班级,您的班级也会持有该观察者。

    例如: 如果您忘记在 ViewController 中删除 removeObserver,当重新初始化同一个控制器时,您的观察者将被再次添加。这样观察者方法将被调用两次,依此类推。

    但删除观察者就足够了,如果您使用的是 ARC,则无需释放您的 textField 或其他对象。

    【讨论】:

    • 知道了。感谢您的帮助
    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多