diff --git a/SocketIOClientSwift/WebSocket.swift b/SocketIOClientSwift/WebSocket.swift index 7c8c787..af05abb 100644 --- a/SocketIOClientSwift/WebSocket.swift +++ b/SocketIOClientSwift/WebSocket.swift @@ -133,12 +133,19 @@ public class WebSocket : NSObject, NSStreamDelegate { if isCreated { return } - unowned let weakSelf = self - - dispatch_async(queue,{ + + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + weakSelf.didDisconnect = false }) - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), { [weak self] in + guard let weakSelf = self else { + return + } + weakSelf.isCreated = true weakSelf.createHTTPRequest() weakSelf.isCreated = false @@ -370,14 +377,17 @@ public class WebSocket : NSObject, NSStreamDelegate { } } if totalSize > 0 { - unowned let weakSelf = self if validateResponse(buffer, bufferLen: totalSize) { - dispatch_async(queue,{ + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + weakSelf.connected = true if let connectBlock = weakSelf.onConnect { connectBlock() } - weakSelf.delegate?.websocketDidConnect(self) + weakSelf.delegate?.websocketDidConnect(weakSelf) }) totalSize += 1 //skip the last \n let restSize = bufferLen - totalSize @@ -515,11 +525,15 @@ public class WebSocket : NSObject, NSStreamDelegate { data = NSData(bytes: UnsafePointer((buffer+offset)), length: Int(len)) } if receivedOpcode == OpCode.Pong.rawValue { - dispatch_async(queue,{[unowned self] in - if let pongBlock = self.onPong { + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + + if let pongBlock = weakSelf.onPong { pongBlock() } - self.pongDelegate?.websocketDidReceivePong(self) + weakSelf.pongDelegate?.websocketDidReceivePong(weakSelf) }) let step = Int(offset+numericCast(len)) @@ -608,19 +622,27 @@ public class WebSocket : NSObject, NSStreamDelegate { writeError(CloseCode.Encoding.rawValue) return false } - dispatch_async(queue,{[unowned self] in - if let textBlock = self.onText { + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + + if let textBlock = weakSelf.onText { textBlock(str! as String) } - self.delegate?.websocketDidReceiveMessage(self, text: str! as String) + weakSelf.delegate?.websocketDidReceiveMessage(weakSelf, text: str! as String) }) } else if response.code == .BinaryFrame { let data = response.buffer! //local copy so it is perverse for writing - dispatch_async(queue,{[unowned self] in - if let dataBlock = self.onData { + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + + if let dataBlock = weakSelf.onData { dataBlock(data) } - self.delegate?.websocketDidReceiveData(self, data: data) + weakSelf.delegate?.websocketDidReceiveData(weakSelf, data: data) }) } readStack.removeLast() @@ -723,12 +745,16 @@ public class WebSocket : NSObject, NSStreamDelegate { ///used to preform the disconnect delegate private func doDisconnect(error: NSError?) { if !self.didDisconnect { - dispatch_async(queue,{[unowned self] in - self.didDisconnect = true - if let disconnect = self.onDisconnect { + dispatch_async(queue, { [weak self] in + guard let weakSelf = self else { + return + } + + weakSelf.didDisconnect = true + if let disconnect = weakSelf.onDisconnect { disconnect(error) } - self.delegate?.websocketDidDisconnect(self, error: error) + weakSelf.delegate?.websocketDidDisconnect(weakSelf, error: error) }) } }