?.值類型的變量直接存儲數據,?引?類型的變量持有的是數據的引?,數據存儲在數據堆中。
值類型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱為值類型。值類型變量聲明后,不管是否已經賦值,編譯器為其分配內存。
引?類型(reference type):string 和 class統稱為引?類型。當聲明?個類時,只在棧中分配???內存?于容納?個地址,?此時并沒有為其分配堆上的內存空間。當使? new 創建?個類的實例時,分配堆上的空間,并把堆上空間的地址保存到棧上分配的??空間中。值類型的實例通常是在線程棧上分配的(靜態分配),但是在某些情形下可以存儲在堆中。引?類型的對象總是在進程堆中分配(動態分配)。
不同點:
1)范圍?? C#的值類型包括:結構體(數值類型、bool型、?戶定義的結構體),枚舉,可空類型。C#的引?類型包括:數組,?戶定義的類、接?、委托,object,字符串。
2)內存分配?? 數組的元素不管是引?類型還是值類型,都存儲在托管堆上。【注意:托管堆和進程堆,是?種么?另外:線程堆棧(Thread Stack)和托管堆(Managed Heap),?后會再單獨涉及】 引?類型在棧中存儲?個引?,其實際的存儲位置位于托管堆。簡稱引?類型部署在托管推上。?值類型總是分配在它聲明的地?:作為字段時,跟隨其所屬的變量(實 例)存儲;作為局部變量時,存儲在棧上。(棧的內存是?動釋放的,堆內存是.NET中會由GC來?動釋放)
二、如何避免
減少new產?對象的次數 使?公?的對象,即靜態成員Static,但要謹慎使? 將String換成StringBuilder拼接字符串,string容易導致內存泄露使?對象池GamObject Pool在字符串暫存池中的是不會被GC的避免使?foreach,盡量使?for循環
三.接?是指定?組函數成員?不實現他們的引?類型。所以只能類和結構來實現接?,在繼承該接?的類??要實現接?的所有?法。
四.輸出結果:AB
五.Assembly.LoadFrom()加載dll
assembly.GetType(“ClassA”);
type.GetMethod(“MethodA”);
六.unity不?持多線程,但可以使?多線程的類庫進?多線程編程
Unity使?多線程注意:
變量都是共享的(都能指向相同的內存地址)UnityEngine的API不能在分線程運? UnityEngine定義的基本結構(int,float,Struct定義的數據類型)可以在分線程計算,如 Vector3(Struct)可以,但Texture2d(class,根?類為Object)不可以。 UnityEngine定義的基本類型的函數可以在分線程運?Debug.Log()?持在?線程中調?
更多關于“unity游戲開發培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。