【问题标题】:How to dispose memory of the UIbutton from the UIScrollview in xamarin.ios如何从 xamarin.ios 中的 UIScrollview 释放 UIbutton 的内存
【发布时间】:2019-03-27 05:43:45
【问题描述】:

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

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 profiler screenshot

【问题讨论】:

    标签: c# ios xamarin xamarin.ios profiler


    【解决方案1】:

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

    uIButton.TouchUpOutside -= NavButton.TouchUpOutside;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多