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