static internal void OverrideRetainAndRelease(IntPtr @class) { // TODO: implement overriding of platform types too. lock (lock_obj) { if (ReleaseTrampolineFunctionPointer == IntPtr.Zero) { retainTrampoline = new RetainTrampolineDelegate(RetainTrampoline); releaseTrampoline = new ReleaseTrampolineDelegate(ReleaseTrampoline); RetainTrampolineFunctionPointer = Marshal.GetFunctionPointerForDelegate(retainTrampoline); ReleaseTrampolineFunctionPointer = Marshal.GetFunctionPointerForDelegate(releaseTrampoline); } } Class.class_addMethod(@class, Selector.RetainHandle, RetainTrampolineFunctionPointer, "@@:"); Class.class_addMethod(@class, Selector.ReleaseHandle, ReleaseTrampolineFunctionPointer, "v@:"); }
static internal void OverrideRetainAndRelease (IntPtr @class) { // TODO: implement overriding of platform types too. lock (lock_obj) { if (ReleaseTrampolineFunctionPointer == IntPtr.Zero) { retainTrampoline = new RetainTrampolineDelegate (RetainTrampoline); releaseTrampoline = new ReleaseTrampolineDelegate (ReleaseTrampoline); RetainTrampolineFunctionPointer = Marshal.GetFunctionPointerForDelegate (retainTrampoline); ReleaseTrampolineFunctionPointer = Marshal.GetFunctionPointerForDelegate (releaseTrampoline); } } Class.class_addMethod (@class, Selector.Retain, RetainTrampolineFunctionPointer, "@@:"); Class.class_addMethod (@class, Selector.Release, ReleaseTrampolineFunctionPointer, "v@:"); }