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);
        }