我目前正在为 iOS 开发一个应用程序,它需要使用套接字连接与硬件设备进行通信。因此我使用带有 NSStream 的单例对象。至此,一切都按预期工作。
问题是如果连接终止或中断,则无法重新打开它(文档中对此进行了说明)。所以我的想法是销毁单例并重新创建它。这不应该干扰单例模式,因为它声明这样一个类只存在一个副本。
有谁知道如何解决这个问题?任何其他不涉及重新创建单例的解决方案都将受到高度赞赏。
我目前正在为 iOS 开发一个应用程序,它需要使用套接字连接与硬件设备进行通信。因此我使用带有 NSStream 的单例对象。至此,一切都按预期工作。
问题是如果连接终止或中断,则无法重新打开它(文档中对此进行了说明)。所以我的想法是销毁单例并重新创建它。这不应该干扰单例模式,因为它声明这样一个类只存在一个副本。
有谁知道如何解决这个问题?任何其他不涉及重新创建单例的解决方案都将受到高度赞赏。
单例不会被销毁,可能您应该包含一个方法来重新打开单例类并关闭/重置旧连接。
为什么不在单例类中添加一些逻辑来测试与设备的连接是否处于活动状态。如果它已经死了,请关闭连接,然后打开一个新连接。这实际上与您通过破坏重新创建单例来尝试做的事情相同,但不会过多地滥用单例模式。它也应该更简单,因为只有单例知道连接,因此保持低耦合。
Singleton 的核心是让你创建一个变量,并且只创建一次,这意味着它会一直存在于你的应用程序中,直到它被终止。我们将其初始化为延迟加载,即在使用时,然后对其进行初始化。它将作为静态分配在 RAM 中,因此我们可以随时调用它来重用它,这确实节省了时间。所以不能破坏 Singleton,只是在里面做一些逻辑。
希望这有帮助。