美文网首页
Byte*属性值为空的困惑

Byte*属性值为空的困惑

作者: coderxiaoqin | 来源:发表于2018-02-28 17:26 被阅读0次

        近段时间来一直被开锁失败的问题困扰!经过排查,发现有一个IEEE属性的值在刚获取设备信息的时候是有值的,但是打了开锁时通过breakpoint发现这个属性的值的空的。而在开锁的过程中需要用到这个属性合成秘钥。后来只能增加了一个类型为NSData的IEEEData属性。勉强解决了不能开锁的问题。

        这两天,客户用的旧SDK也反馈有这样的问题,不得不下决心找到问题的根源从而永久搞定这个bug。

        此为背景!......

        IEEE为空时,在设备模型类中的实现文件初始值定义为:_IEEE = NULL;当网关返回设备信息时:

                uint8_t ieee[8];

    ......(解析网关数据)

                    device.IEEE = ieee;

        后来经过多次试验和思考得出如下结论:在解析方法中给了device.IEEE赋了一个指针。当方法执行完之后ieee的内存空间势必会在一定时间内被回收,故device.IEEE指向的是一个空值。

        应该在设备模型类中申请堆内存空间来保存数据:_IEEE = malloc(sizeof(Byte) * 8);

        在解析方法中按位给IEEE属性赋值:

            uint8_t ieee[8];

                for (int i = 0; i < 8; i++)

                {

                    ieee[i] = msg[msgPtr++];

                    device.IEEE[i] = ieee[i];

                }

    这样处理之后,IEEE的值就不会为空了。

    相关文章

      网友评论

          本文标题:Byte*属性值为空的困惑

          本文链接:https://www.haomeiwen.com/subject/slfgyttx.html