type
status
date
summary
tags
category
icon

一、概述

翻阅UGUI源码时,会看见一些特殊的容器类型,源码中很多地方都会使用它们,抱着一探究竟的想法,写下这篇文章记录。展示的Unity源码版本基于2019.1,链接地址如下:

二、ObjectPool

ObjectPool使用了一个栈(后进先出)来管理对象,避免了临时新建对象时不必要的GC。当需要新建一个对象(Get)时,从栈顶取出对象。当对象使用完释放(Release)时,将对象入栈准备下次使用。增加了GetRelease调用时的Action。

三、ListPool

ListPool由ObjectPool拓展而来,优化了频繁new一个list时带来GC问题

四、IndexedSet

IndexedSet是一个查找时间优化为O(1),且能保证元素唯一的容器。内部是通过维护了一个列表和字典来实现。
优点:
  • 元素唯一(因为使用了字典)
  • 快速移除元素(先和列表末尾元素交换,然后移除列表末尾元素)
  • 可快速添加元素至末尾
  • 顺序访问(可支持下标访问)
缺点:
  • 使用更多内存(因为额外维护了一个字典)
  • 元素顺序并非不变(因为删除操作是先和末尾元素交换,再删除末尾元素)
  • 不易序列化
 
Unity UGUI模块 Mask和RectMask2DUnity 组件工具 TMP/Text字体替换工具
  • Twikoo
  • Cusdis