public LuaFunction GetFunction(string name) { WeakReference weak = null; if (funcMap.TryGetValue(name, out weak)) { if (weak.IsAlive) { LuaFunction func = weak.Target as LuaFunction; if (func.IsAlive) { func.AddRef(); RemoveFromGCList(func.GetReference()); return(func); } } funcMap.Remove(name); } if (PushLuaFunction(name, false)) { int reference = ToLuaRef(); if (funcRefMap.TryGetValue(reference, out weak)) { if (weak.IsAlive) { LuaFunction func = weak.Target as LuaFunction; if (func.IsAlive) { funcMap.Add(name, weak); func.AddRef(); RemoveFromGCList(reference); return(func); } } funcRefMap.Remove(reference); delegateMap.Remove(reference); } LuaFunction fun = new LuaFunction(reference, this); fun.name = name; funcMap.Add(name, new WeakReference(fun)); funcRefMap.Add(reference, new WeakReference(fun)); RemoveFromGCList(reference); if (LogGC) { Debugger.Log("Alloc LuaFunction name {0}, id {1}", name, reference); } return(fun); } Debugger.Log("Lua function {0} not exists", name); return(null); }
public void AddRef() { ++count; //Debugger.Log("LuaDelegate {0} AddRef {1}", reference, count); func.AddRef(); if (self != null) { self.AddRef(); } }