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@:"); }