【问题标题】:Why Xcode says that 'instance will be immediately deallocated'?为什么 Xcode 说“实例将立即被释放”?
【发布时间】:2020-09-20 09:57:02
【问题描述】:

我试图找出为什么我在 Xcode 中收到以下消息:

Instance will be immediately deallocated because property 'delegate' is 'weak'

这是一个代码:

import ARKit
     
class OtherViewController: NSObject, ARSCNViewDelegate { }
    
class ViewController: UIViewController, ARSCNViewDelegate {
        
    var arView = ARSCNView(frame: .zero)
    let otherVC = OtherViewController()
        
    override func viewDidLoad() {
        super.viewDidLoad()

        // I'M USING ONE OF THESE
        
        arView.delegate = self                // works fine
        arView.delegate = otherVC             // works fine
        arView.delegate = ViewController()    // PRINTS WARNING
    }
}

问题:

我了解委托是 weak 并且是可选的:

weak var delegate: ARSCNViewDelegate? { get set }

但是,为什么 arView.delegate = selfarView.delegate = otherVC 可以正常工作,但 arView.delegate = ViewController() 会打印警告?

【问题讨论】:

    标签: appdelegate swift-protocols


    【解决方案1】:

    通过设置 arView.delegate = ViewController(),您创建了一个新的 ViewController 实例,该实例不会保留在任何地方,因此一旦函数返回,它就会被释放。

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多