Unity中的引用计数器(RefCount)

你的名字 2021-09-18 09:06 603阅读 0赞

引用计数使用场景:

有一间黑色的屋子,里边有一盏灯。当第一个人进屋的时候灯会打开,之后进来的人则不用再次打开了,因为已经打开过了。当屋子里所有人都离开了的时候,灯则会关闭。

引用计数器工具 :

  1. namespace QFramework
  2. {
  3. public interface IRefCount
  4. {
  5. int RefCount { get; }
  6. void Retain(object refOwner = null);
  7. void Release(object refOwner = null);
  8. }
  9. public class SimpleRC : IRefCount
  10. {
  11. public int RefCount { get; private set; }
  12. public void Retain(object refOwner = null)
  13. {
  14. RefCount++;
  15. }
  16. public void Release(object refOwner = null)
  17. {
  18. RefCount--;
  19. if(RefCount == 0)
  20. {
  21. OnZeroRef();
  22. }
  23. }
  24. protected virtual void OnZeroRef()
  25. {
  26. }
  27. }
  28. }

举例实现:

  1. using UnityEngine;
  2. namespace QFramework
  3. {
  4. public class SimpleRCExample : MonoBehaviour
  5. {
  6. #if UNITY_EDITOR
  7. [UnityEditor.MenuItem("QFramework/Example/22.SimpleRCExample", false, 22)]
  8. static void MenuClick()
  9. {
  10. var room = new Room();
  11. room.EnterPeople();
  12. room.EnterPeople();
  13. room.EnterPeople();
  14. room.LeavePeople();
  15. room.LeavePeople();
  16. room.LeavePeople();
  17. room.EnterPeople();
  18. }
  19. #endif
  20. class Light
  21. {
  22. public void Open()
  23. {
  24. Debug.Log("灯打开了");
  25. }
  26. public void Close()
  27. {
  28. Debug.Log("灯关闭了");
  29. }
  30. }
  31. class Room:SimpleRC
  32. {
  33. Light mLight = new Light();
  34. public void EnterPeople()
  35. {
  36. if (RefCount == 0)
  37. {
  38. mLight.Open();
  39. }
  40. Retain();
  41. Debug.LogFormat("一个人进入房间,当前房间有{0}个人", RefCount);
  42. }
  43. public void LeavePeople()
  44. {
  45. Release();
  46. Debug.LogFormat("一个人离开房间,当前房间有{0}个人", RefCount);
  47. }
  48. protected override void OnZeroRef()
  49. {
  50. mLight.Close();
  51. }
  52. }
  53. }
  54. }

运行结果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMzIzMjU2_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,603人围观)

还没有评论,来说两句吧...

相关阅读

    相关 csscounter计数器

    作为程序猿,代码比什么都有说服力,嗯,所以废话不多说,直接看吧,认真看完了,就一定有收获(内容有点多,需要一点耐心哦,我是一点一点写的,咱也一点一点看呗) counte

    相关 Unity引用计数器RefCount

    引用计数使用场景: 有一间黑色的屋子,里边有一盏灯。当第一个人进屋的时候灯会打开,之后进来的人则不用再次打开了,因为已经打开过了。当屋子里所有人都离开了的时候,灯则会关闭