我有一个名为ChatDataSource
的班级。 ChatDataSource
有一个ChatManager
类,如lazy var。如果用户不执行任何操作ChatManager
将不会初始化。 ChatManager
有一些块正在调用ChatDataSource
中的某些函数。我在封闭者中为ChatDataSource
提供了弱引用。我注意到ChatDataSource
对象永远不会从记忆中消失,因为ChatManager
使他保持弱联系。问题还在于,当我打开一个新的对话并初始化一个新的ChatDataSource
时,旧的ChatDataSource
就在内存中。 ChatManager
也住在其他控制器中。如何从ChatManager中删除弱refence?
我的代码片段
class ChatDataSource: ChatDataSourceProtocol {
fileprivate lazy var chatManager: ChatManager = {
let chatManager = ChatManager()
chatManager.onMessageChanged = { [weak self] (message) in
guard let sSelf = self else { return }
sSelf.delegate?.chatDataSourceDidUpdate(sSelf)
}
chatManager.changeUIMessageByID = { [weak self] (id) in
guard let sSelf = self else { return }
guard let uiID = sSelf.messageDataDictionary[id] else { return }
let message = sSelf.messages[uiID]
message.status = .success
sSelf.delegate?.chatDataSourceDidUpdate(sSelf)
}
return chatManager
}()
}
我试着做出像。但它不起作用。
chatManager.didLeaveConversation = { [weak self] in
self = nil
}