# reame **Repository Path**: baiyiren/reame ## Basic Information - **Project Name**: reame - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-08 - **Last Updated**: 2025-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Lua 代码新增生命周期相关规范 ## 1.onClear 方法添加 - 1.1 目前部分组件继承GButton等(未继承UICompBase的):onClear 方法未生效 ```lua local UseLoginCode = class("UseLoginCode", fgui.GButton) function UseLoginCode:ctor() self:enableComponentEvents() end ``` 调整为: ```lua local UseLoginCode = class("UseLoginCode", lt.UIGButtonBase) function UseLoginCode:ctor() UseLoginCode.super.ctor(self) end ``` - 1.2 漏添加onClear 方法的 - 1.3 onClear内需清理全局self._xxx table 类型、userdata类型变量,置为nil(避免内存泄露和减少GC压力) ## 2.注册事件清理 预制体:公共组件类,单独注册(整理比较花时间) ### 2.1 组件类 包含:按钮、列表等 - 示例如下: ```lua self._sureBtn:addClickListener(handler(self, self.onSureBtnClick)) compQuickItem:addEventListener(fgui.UIEventType.DragEnd, function(context) local pos = compQuickItem:getPosition() lt.PrefManager:setUserValueByKey("QUICK_ITEM_DRAG", pos.x.."|"..pos.y) end) ``` - 调整为: ```lua -- 注册在onEnter 销毁在onExit function CompSkillOperateItem:onEnter() self:addEventListener(fgui.UIEventType.TouchBegin, handler(self, self.onTouchBegain), EventTag.TouchBegin); self:addEventListener(fgui.UIEventType.TouchMove, handler(self, self.onTouchMove), EventTag.TouchMove); self:addEventListener(fgui.UIEventType.TouchEnd, handler(self, self.onTouchEnd), EventTag.TouchEnd); self._editBtn:addClickListener(handler(self, self.editBtnClick)); end function CompSkillOperateItem:onExit() self:removeEventListener(fgui.UIEventType.TouchBegin, EventTag.TouchBegin) self:removeEventListener(fgui.UIEventType.TouchMove, EventTag.TouchMove) self:removeEventListener(fgui.UIEventType.TouchEnd,EventTag.TouchEnd) self._editBtn:removeClickListener(); end ``` ### 2.2 窗口类 调整为: ```lua function UIWindowBase:onHide() self:removeEventListener(fgui.UIEventType.TouchBegin, EventTag.TouchBegin) self:removeEventListener(fgui.UIEventType.TouchMove, EventTag.TouchMove) self:removeEventListener(fgui.UIEventType.TouchEnd,EventTag.TouchEnd) self._editBtn:addClickListener(handler(self, self.editBtnClick)); end function UIWindowBase:onShown() self:addEventListener(fgui.UIEventType.TouchBegin, handler(self, self.onTouchBegain), EventTag.TouchBegin); self:addEventListener(fgui.UIEventType.TouchMove, handler(self, self.onTouchMove), EventTag.TouchMove); self:addEventListener(fgui.UIEventType.TouchEnd, handler(self, self.onTouchEnd), EventTag.TouchEnd); self._editBtn:removeClickListener(); end ``` ## 3.预制体类写法规范 主要用于:列表、相同类UI Item 中(需单独创建、将注册等逻辑写在预制体类内部),禁止写在外部 参考:CompSkillOperate、CompSkillOperateItem ## 4.关于registerComponent 同时两个窗口:删除其中一个CompItem了,另外一个失效问题 解决:公共包卸载问题,待讨论(暂时不卸载公共包) ## 5.分工: 按照原来开发人员进行重新编写 ## 6.地图上事件也要处理 ## 7.绑定1000个事件(已确定,同一个按钮绑定5000个必然出现断言)