У меня есть приложение 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]
?