MQTTClient 那些坑

前段时间做一个智能路由器的项目,要求使用MQTT,研究了几个相关的框架,还是选择MQTTClient,因为他的版本更新比较快!

项目应用场景

本地连接路由器WiFi,本地MQTT通信,配置路由器过程中路由器会重启,待路由器重启成功之后MQTT自动连接。如果没有本地连接路由器就使用MQTT远程通信。

项目中MQTT会有经常断开和自动连接的需求,在断开重连的时候各种崩溃,主要原因就是MQTTClient断开连接之后,某些类的数据没有释放完全,或者是对象内存释放时,所用内存并没有完全被擦除,仍有旧对象部分数据可用,重连的时候又使用到了这个类,导致crash。

如下关闭了MQTTClient:

MQTTClient 那些坑_第1张图片

但是马上重新连接就会crash:

MQTTClient 那些坑_第2张图片

这里self已经为nil,但是线程还是会走到这里,导致奔溃。

所以,我建立了两个MQTTClient管理的类,SQMQTTClientManager和SQMQTTClientLocationManager,一个管理远程通信,一个管理本地通信。这样可以解决本地与远程切换crash的问题。

你可能感兴趣的:(MQTTClient 那些坑)