懒惰的初始化和脱位



我会知道,在我的视图控制器中,在我的视图控制器中,使用懒惰属性,在 deinit方法中,只有在初始化时调用我的懒惰属性的方法。在某些代码下方:

fileprivate lazy var session: MySession = {
    let session: MySession = MySession()
    session.delegate = self
    return session
}()
deinit {
    session.delete()
}

以这种方式,当调用deinit方法中的session.delete()并且尚未使用session(因此仍然是nil(时,它是初始化的,然后调用delete。我不想要这个。我只想在以前初始化session时才致电delete

有没有办法实现这一目标?我是否放开了懒惰的初始化想法?

如果创建会话,您可以使用私有变量来跟踪。我认为这个示例可以做您想要的(从操场上代码(:

class Thing {
    private var hasMadeSession: Bool = false
    lazy fileprivate var session: Int = {
        self.hasMadeSession = true
        return 1
    }()
    
    deinit {
        print(#function)
        if self.hasMadeSession {
            print("Hello")
        }
    }
}
var thing: Thing? = Thing()
thing = nil // Prints "deinit"
thing = Thing()
thing?.session
thing = nil // Prints "deinit" and "Hello"

相关内容

  • 没有找到相关文章

最新更新