type
status
date
summary
tags
category
icon
一、概述
翻阅UGUI源码时,会看见一些特殊的容器类型,源码中很多地方都会使用它们,抱着一探究竟的想法,写下这篇文章记录。展示的Unity源码版本基于2019.1,链接地址如下:
二、ObjectPool
ObjectPool使用了一个栈(后进先出)来管理对象,避免了临时新建对象时不必要的GC。当需要新建一个对象(Get)时,从栈顶取出对象。当对象使用完释放(Release)时,将对象入栈准备下次使用。增加了
Get
和Release
调用时的Action。三、ListPool
ListPool由ObjectPool拓展而来,优化了频繁new一个list时带来GC问题
四、IndexedSet
IndexedSet是一个查找时间优化为O(1),且能保证元素唯一的容器。内部是通过维护了一个列表和字典来实现。
优点:
- 元素唯一(因为使用了字典)
- 快速移除元素(先和列表末尾元素交换,然后移除列表末尾元素)
- 可快速添加元素至末尾
- 顺序访问(可支持下标访问)
缺点:
- 使用更多内存(因为额外维护了一个字典)
- 元素顺序并非不变(因为删除操作是先和末尾元素交换,再删除末尾元素)
- 不易序列化
- 作者:Felix
- 链接:felix1125.com/article/3c2d0e81-79a2-4249-b1bd-1186e9b10fb4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章