Awake与Start
Awake是在场景被加载的时候被调用
Start是第一次Update/FixedUpdate调用之前被调用
执行顺序:Awake–>OnEnable->Start
FixedUpdate会以固定时间间隔更新
可做逻辑帧更新
反射的实现原理
审查元数据并收集关于它的类型信息的能力。实现原理:在运行时根据程序集及其中的类型得到元数据。下面是实现步骤:
//1.导入命名空间
using System.Reflection;
//2.加载程序集,返回类型是一个Assembly
var assembly = Assembly.Load(“程序集”)
//3. 得到程序集中所有类的名称
foreach (Type type in assembly.GetTypes())
{
string t = type.Name;
}
//4. 获取某一个类的类型,创建实例
Type type = assembly.GetType(“程序集.类名”);
Activator.CreateInstance(type);
//5.获取当前方法,并调用
MethodInfo mInfo = type.GetMethod(“方法名”);
m.Info.Invoke(null,方法参数);
遍历集合元素的过程中,删除某一元素,
要从后向前遍历删除,否则会出现乱序,遍历越界问题
Heap与Stack有何区别
heap是堆,stack是栈。
stack的空间由操作系统自动分配和释放
heap的空间是手动申请和释放的,heap常用new关键字来分配
StringBuilder.ToString() 产生多余GC的问题(.Net2.0及以前的版本)
调用StringBuilder.ToString() 会产生GC,可用下面的方法回避
public static string GarbageFreeString(StringBuilder sb) {
string str = (string)sb.GetType().GetField(
"_str",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).GetValue(sb);
//Optional: clear out the string
//for (int i = 0; i < sb.Capacity; i++) {
// sb.Append(" ");
//}
return str;
}
详见链接