所以我的deinit func永远不会被叫,我已经找到了答案,但它们都不适合我。并且视图控制器因内存问题而不断崩溃。谢谢你的帮助!
这是我的代码:
Yaml
答案 0 :(得分:1)
您可能需要在为数据服务提供的闭包中使用对self
的弱引用或无主引用。或者,您可能希望查看该代码并确保它在您期望时释放它对此闭包的引用。给定observe
动词,我希望它无限期地保留对此闭包的引用。所以我推荐这个:
对于#1,关键部分就在你的闭包内,Swift有一个指定的方式来声明self
应该是一个弱指针:
DataService.instance.REF_USERS.child("\(info.userUid)").observe(.value, with: { (snapshot) in
变为
DataService.instance.REF_USERS.child("\(info.userUid)").observe(.value, with: { [weak self] (snapshot) in
请注意,你也可以使用[unowned self]
,但是你会断言你知道当这个块执行时self将永远不会是非nil。当你传递给第三方时,我认为你不知道。因此,使用[weak self]
然后您必须将self
视为可选项,这对于这种情况非常有用!
答案 1 :(得分:0)
这会打电话给你的deinit
weak var weakSelf = self
DataService.instance.REF_USERS.child("\(info.userUid)").observe(.value, with: { (snapshot) in
if let postDict = snapshot.value as? Dictionary<String, AnyObject>, let strongSelf = weakSelf {
let key = snapshot.key
strongSelf.user = Users(key: key, artistData: postDict)
if let user = strongSelf.user {
strongSelf.artistNameLbl.text = user.name
strongSelf.artistImg.sd_setImage(with: URL(string: "\(user.profilePicUrl!)") , placeholderImage: UIImage(named:"Placeholder") , options: .continueInBackground)
}
}
})