关于MonoBehaviour的单例通用规则
生活随笔
收集整理的這篇文章主要介紹了
关于MonoBehaviour的单例通用规则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
長久以來,對于基于MonoBehaviour的單例總是心有梗結,總覺得用得很忐忑,今天,終于有時間思考和總結了下,理清了想通了。代碼和注釋如下:
其中GameLogic是我們自己的控制游戲生命周期的管理類,當游戲進行中,GameLogic.AddComponent總是成功的添加組件到一個標記為DontDestroyOnLoad的對象上,這樣保證單例的生命期。
當游戲結束后,開始數據清理時,如果調用 GameLogic.AddComponent就會返回null,這樣保證在游戲結束的清理工作中已銷毀置空的單例不會因為誤引用而【死而復生】
class UICanvasManager : MonoBehaviour{/*** 基于MonoBehaviour的單例規則,保證單例的唯一性和安全性* 1,不要手動在編輯器中掛給對象,防止掛重* 2,使用如下方式通過GameLogic生成單例,生命周期易控制* 3,不要在AWake或其它任何地方給_instance賦值,保證單例唯一,不變。考慮以下【危險案例】*//*** 【危險案例】* 先通過UICanvasManager.Instance獲取了一個指向對象A的單例,進行一些操作后,A中有了一些數據,* 后面不小心通過AddComponent添加了一個UICanvasManager組件,此時單例指向了對象B* 這時候有一些游戲數據在對象A中,有一些數據在對象B中,后果是B中有些你以為已經初始化了的數據卻為空*/protected static UICanvasManager _instance;public static UICanvasManager Instance{get{if(_instance == null){_instance = GameLogic.AddComponent<UICanvasManager>();}return _instance;}//get}//Instance }?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的关于MonoBehaviour的单例通用规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于【C++项目:无法解析的外部符号】
- 下一篇: 【l转】VS2015下解决:无法解析的外