前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QFramework 使用指南 (2020) - Res Kit(6)ResLoader 的推荐用法

QFramework 使用指南 (2020) - Res Kit(6)ResLoader 的推荐用法

作者头像
零式的天空
发布2022-03-21 17:47:28
4430
发布2022-03-21 17:47:28
举报
文章被收录于专栏:零域Blog零域Blog

在上一篇,我们了介绍了 AssetBundle 中加载 Sprite 的坑,以及 Res Kit 如何填上了这个坑。

在这一篇,我们简单聊一下,ResLoader 的设计。

ResLoader 推荐用法

ResLoader 的推荐用法,是一个需要加载的单元申请一个 ResLoader。

代码如下:

代码语言:javascript
复制
using QF.Res;
using QF.Extensions;
using UnityEngine;

namespace QF.Example 
{
	public class TestResKit : MonoBehaviour 
	{
		/// <summary>
		/// 每一个需要加载资源的单元(脚本、界面)申请一个 ResLoader
		/// ResLoader 本身会记录该脚本加载过的资源
		/// </summary>
		/// <returns></returns>
		ResLoader mResLoader = ResLoader.Allocate ();
    
    ...
    
    void Destroy()
		{
			// 释放所有本脚本加载过的资源
			// 释放只是释放资源的引用
			// 当资源的引用数量为 0 时,会进行真正的资源卸载操作
			mResLoader.Recycle2Cache();
			mResLoader = null;
		}
	}
}

在以上代码中,TestResKit 是一个需要加载资源的单元。

这个单元是什么意思呢?

其实很简单,单元可以是 UIPanel (界面),或者任何需要加载资源服务的 MonoBehaviour。

ResLoader 的职责

ResLoader 的职责字如其意,就是负责加载资源的,即资源加载器。

一个 ResLoader 会记录所有它加载过的资源。

这样它在释放资源的时候只需要根据加载记录,进行释放即可。

ResLoader 与 单元(Test 脚本)的示意图如下:

这里我们要注意,ResLoader 不是进行真正的资源加载操作,而是进行资源的引用获取。

真正的资源加载是在 ResMgr 中完成,这个过程用户是无法感知的到的。

ResLoader 获取资源引用的过程如下:

  1. 从 ResLoader 的引用记录中查询是否已经获取了引用,如果之前已经在 ResLoader 记录过资源引用则返回资源。否则执行 2.
  2. 从 ResMgr 中查询是否已经有资源对象,如果有资源对象,返回资源,并在 ResLoader 中记录引用,同时对资源对象进行引用计数 +1 操作,否则执行 3.
  3. 让 ResMgr 进行资源加载,同时创建资源对象,剩下的步骤同 2。

大致的访问资源的过程就是如此,不理解的童鞋不要紧,因为对使用上来说不重要。

我们只需要知道,建议每个需要加载的脚本申请一个 ResLoader,是为了更方便地让大家进行资源管理。

不管这个脚本加载过多少个东西,也不管别的脚本加载过多少,只需要各自脚本释放自己的 ResLoader 即可。

因为每个资源对象对集成了引用计数的。

申请 ResLoader 的消耗

几乎没有消耗,因为 ResLoader 是从对象池中申请的。

此篇的内容就这些。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ResLoader 推荐用法
  • ResLoader 的职责
  • 申请 ResLoader 的消耗
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档