美文网首页
cocos2d-x中使用Lua遇到一个奇异Bug

cocos2d-x中使用Lua遇到一个奇异Bug

作者: 小城大麦 | 来源:发表于2017-05-17 11:37 被阅读21次

    同事写了一个clean方法,但是却发现data并没有清空

    local UserLevel = class('UserLevel')
    local instance_ = nil
    function UserLevel:getInstance()
          if instance_ == nil then
              instance_ = UserLevel:create()
          end
          return instance
    end
    -- lazy的方式创建data
    funcion UserLevel:getData()
        if self.data == nil then
            self.data = {level = 1}
        end
    end
    function UserLevel:clean()
      self.data = nil
      print(tostring(self.data)) --此处打印可能不为nil
    end
    

    Bug是clean方法没有起作用,print的输出不为nil,看起来不太可能啊,但是确实是有可能的。
    调用getData()存在两种方式

    --错误的方式,data属性将会写到class属性中
    UserLevel:getData()
    --正确的方式
    UserLevel:getInstance():getData()
    

    如果使用了错误的方式调用了一次,又使用了正确的方式调用一次,self.data将会在class和instance_中存在,那么self.data被赋值为nil仅仅修改了instance_的data,由于class是instance_的metadata,再次调用self.data会索引class的data。

    相关文章

      网友评论

          本文标题:cocos2d-x中使用Lua遇到一个奇异Bug

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