﻿## ResLoader 推荐用法

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

代码如下:

```csharp
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 脚本）的示意图如下:
![image.png](https://file.liangxiegame.com/296b0166-bdea-47d5-ac87-4b55c91df16f.png)

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

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

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

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

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

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

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

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

## 申请 ResLoader 的消耗

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

本文由 QFramework 教程年会员赞助，地址：[https://www.gamepixedu.com/goods/show/55](https://www.gamepixedu.com/goods/show/55)

* QFramework 主页：[qframework.cn](https://qframework.cn)
* QFramework 交流群: 541745166
* QFramework Github 地址: <https://github.com/liangxiegame/qframework>
* QFramework Gitee 地址：<https://gitee.com/liangxiegame/QFramework>