【发布时间】:2017-11-18 07:11:52
【问题描述】:
我正在使用 Socket.io 库向我的应用程序添加实时功能,并且我正在使用单例设计
import SocketIO
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
var socket: SocketIOClient!
func establishConnection() {
socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])])
socket.connect()
}
func closeConnection() {
socket.disconnect()
}
}
所以从技术上讲,每当我的应用程序加载时,socket 不能为零,否则它会崩溃。我找到了两个可以解决这个问题的解决方案
-
懒惰
lazy var socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])])
通过使用这个方法socket 永远不会为零,因为它总是会被初始化。但是这种方法的问题是,如果创建 SocketIOClient 并不便宜,那么它会是一个很好的方法。
-
初始化()
class SocketIOManager: NSObject { static let sharedInstance = SocketIOManager() let socket: SocketIOClient! init() { super.init() socket = SocketIOClient(socketURL: URL(string: mainURL)!, config: [.log(false), .compress, .connectParams(["token": "asdasdasdsa"])]) } }
通过使用这种方法,我有点困惑,因为我最初并没有像这样创建 SocketIOManager 对象
let socket = SocketIOManager()
因为如果我没记错的话,如果只创建对象,套接字就会被初始化,而且我不确定在单例设计中使用init()
哪种方法适合我的用例?
【问题讨论】: