protected override void Dispose(bool disposing) { base.Dispose(disposing); if (viewConformanceDesc != null) { Marshal.FreeHGlobal((IntPtr)viewConformanceDesc); viewConformanceDesc = null; } }
protected virtual ProtocolWitnessTable *CreateViewConformance() { viewConformanceDesc = (ViewProtocolConformanceDescriptor *)Marshal.AllocHGlobal(sizeof(ViewProtocolConformanceDescriptor)); // zero everything first *viewConformanceDesc = default; viewConformanceDesc->Populate(Metadata->TypeDescriptor); var bodySwiftType = SwiftType.Of(BodyProperty.PropertyType) !; var bodyConformance = bodySwiftType.GetProtocolConformance(SwiftUILib.ViewProtocol); var witnessTable = SwiftCoreLib.GetProtocolWitnessTable(&viewConformanceDesc->ConformanceDescriptor, Metadata, null); viewConformanceDesc->FixupAndRegister( witnessTable, bodyConformance, bodySwiftType.Metadata, SwiftGlueLib.BodyProtocolWitness); return(witnessTable); }