如何从对象中删除弱引用?在斯威夫特

时间:2016-11-01 22:53:02

标签: swift memory-leaks weak-references

我有一个名为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
        }

0 个答案:

没有答案