Должен ли я использовать unowned self в обработчике завершения закрытия веб-сокета? - PullRequest
1 голос
/ 09 июля 2020

У меня есть приложение Vapor Swift, использующее WebSockets. У меня есть закрытие, которое срабатывает при закрытии WebSocket и что-то делает с закрытым объектом WebSocket.

app.webSocket("route") { _, socket in

    // do I have to use [unowned socket] here?

    socket.onClose.whenComplete { /* [unowned socket] */ _ in
        removeFromWhatever(socket)
    }
}

Насколько я понимаю, [unowned self] следует использовать, если закрытие объекта захватывает себя. В этом случае onClose является свойством WebSocket, а закрытие whenComplete является методом объекта onClose, а закрытие захватывает объект WebSocket.

Это особенно интересно, потому что обратный вызов onText объекта WebSocket предоставляет WebSocket в качестве аргумента для предотвращения утечек памяти.

socket.onText { socket /* passed in to pervent memory leaks */, string in
    socket.send(string.reversed())
}

Нужно ли мне использовать [unowned socket] в закрытии onClose в этом случае? Может ли произойти утечка памяти, если я не использую [unowned socket]?

...