gpt4 book ai didi

ios - 关于 Swift 中内存管理的问题

转载 作者:行者123 更新时间:2023-11-28 14:00:37 24 4
gpt4 key购买 nike

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

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

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 中删除它们。它们是从内存中完全释放还是我必须做一些额外的事情?

最佳答案

<强>1。 AVCaptureSession:

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

了解有关弱、强等的更多信息 here :

<强>2。 weak self block 中:

当你的完成 block 被其他一些对象持有时,你应该避免强引用循环。所以你应该对这样的完成 block 使用weak self

请引用这个post了解更多信息。

<强>3。观察员:

如果您忘记对您的类执行removeObserver,即使您重新初始化同一个类,您的类也会保留该观察者。

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

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

关于ios - 关于 Swift 中内存管理的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53592392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com