Slate 组件问题排查总结简介
首先是一个工作中遇到的BUG: 用slua添加子节点到父节点上的时候,第二次打开无法显示对应的子节点Widget。对应Lua代码如下
local comboBox = ui_manager.ShowUI(ui_manager.UI_Config.ui_coupon_combobox,2,price,buyUIInfo.shopInfo.id)
if comboBox then
self:AttachChildWindow("ScaleBox_Coupon",comboBox)
end
因为我们引入了UI对象的内存池概念,很自然而然的想到了缓存住的控件是不是释放有问题。检查slua的release代码之后发现没有任何问题。基于ScaleBox 只能有1个子物体这一个机制,在猜测BUG原因的时候,尝试用CanvasPanel替换ScaleBox组件。发现果然能解决这个问题。
但是也带来了2个新问题:
1、ScaleBox子物体在第一次关闭和第二次打开的时候经历了什么?
2、为什么CanvasPanel就可以而ScaleBox不可以?
为了解决以上疑问,开启我们的排查过程。
为了能使大家更好的了解这个流程,先对Slate组件创建销毁流程进行介绍。Slate组件创建销毁流程
1、将我们日常使用的一个组件,ScaleBox拆出来看(如下图):有如下的对应关系。里面包含了 UScaleBox,UScaleBoxSlot,SscaleBox 。
2、创建过程
3、销毁过程