繁体   English   中英

如何从 xamarin.ios 中的 UIScrollview 处理 UIbutton 的内存

[英]How to dispose memory of the UIbutton from the UIScrollview in xamarin.ios

一种用于创建按钮并添加到滚动视图中的方法。

for (int i = 0; i < navTiles.Count; i++)
  {
    navTab = navTiles[i];
    tileRow += staticheight + 15;
    contentHeight = tileRow + 15;
    if (navTab.IsFullTile)
    {
      using (var img =   UIImage.FromBundle(navTab.ImageName))
       {
         using (var navButton = new UIButtonCustom())
         {
           navButton.Frame = new CGRect(15, tileRow, ScreenSize.Width - 30, staticheight);
           navButton.SetImage(img, UIControlState.Normal);
           navButton.TouchUpInside += NavButton_TouchUpInside;
           navButton.TouchUpOutside += NavButton_TouchUpOutside;
           navButton.Tag = (int)navTab.NavTabType;
           //var weaks = new WeakReference(navButton);
            svMainScrollView.AddSubview(navButton);
          }
        }
       }
     }

用于处理按钮内存的方法

        if (disposing)
        {

            foreach (var obj in this.svMainScrollView.Subviews)
            {

                if (obj.GetType() == typeof(UIButtonCustom))
                {
                    UIButton uIButton = (UIButtonCustom)obj;

                    if (uIButton.Tag == 1 || uIButton.Tag == 2 || uIButton.Tag == 3 || uIButton.Tag == 4 || uIButton.Tag == 5 || uIButton.Tag == 6)
                    {

                        uIButton.TouchUpInside -= NavButton_TouchUpInside;
                        uIButton.Dispose();
                        uIButton.RemoveFromSuperview();
                        uIButton = null;

                        Console.WriteLine("has tag");
                    }
                    else
                    {
                        Console.WriteLine("has no tag");
                    }

                }

            }
            GC.SuppressFinalize(this);

        }
        base.Dispose(disposing)
       }

但仍然没有删除内存。 但每次再次创建按钮时都会增加计数 Xamarin.ios 请找到附加的 Xamarin 分析器图像,因为您可以找到 UICustombutton 计数增加,并且当将视图推送到另一个视图控制器并再次返回时推送到新的视图控制器内存计数增加分析器帮助我解决如何避免在创建新对象时增加内存计数

我正在使用 xamarin profiler 企业试用版 1.6.4.16 和快照捕获工作,只有活动对象复选框不起作用

请找到随附的 xamarin 分析器屏幕截图在此处输入图片说明

在您的 dispose 方法中,在调用uIButton.Dispose()之前添加以下行:

uIButton.TouchUpOutside -= NavButton.TouchUpOutside;

当您在视图的创建中为 touchupINSIDE 和 touchupOUTSIDE 添加处理程序时,您需要在处理时删除它们以释放引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM