Xamarin.iOS-内存泄漏问题UIImage/UIImageView

Xamarin.iOS-内存泄漏问题UIImage/UIImageView,xamarin.ios,Xamarin.ios,我已经在我的应用程序中添加了控制器,它可以使用UISlider调整图像亮度和对比度。当我多次移动滑块时,我的应用程序崩溃,我认为这会导致内存泄漏,但我无法找到它发生的位置以及如何修复,因为我以前从未这样做过 public abstract class FilteringDemoDelegate { public abstract void ImageViewControllerDidFinish(UIImage filteredImage); } public class ImageView

我已经在我的应用程序中添加了控制器,它可以使用UISlider调整图像亮度和对比度。当我多次移动滑块时,我的应用程序崩溃,我认为这会导致内存泄漏,但我无法找到它发生的位置以及如何修复,因为我以前从未这样做过

public abstract class FilteringDemoDelegate
{
 public abstract void ImageViewControllerDidFinish(UIImage filteredImage);
}

public class ImageViewController : UIViewController
{
   UIImage sourceImage, displayImage, resultImage;   
   public FilteringDemoDelegate filteringDelegate;
   UIButton saveButton, resetButton;
   UIImageView imageView;
   UISlider sliderC, sliderB;        
   UILabel labelC, labelB;

public ImageViewController(UIImage image)
{            
        sourceImage = image;
}

public override void ViewDidLoad()
{
    base.ViewDidLoad();
    Title = "Settings";
    View.BackgroundColor = UIColor.White;            

    resetButton = UIButton.FromType(UIButtonType.RoundedRect);
    resetButton.Frame = new CGRect(110, 40, 90, 40);
    resetButton.SetTitle("Reset", UIControlState.Normal);
    resetButton.SetTitleColor(UIColor.FromRGB(11, 132, 66), UIControlState.Normal);

    resetButton.TouchUpInside += (sender, e) => {              
        sliderB.Value = 0;
        sliderC.Value = 1;     
        HandleValueChanged(sender, e);
    };
    View.Add(resetButton);

    saveButton = UIButton.FromType(UIButtonType.RoundedRect);
    saveButton.Frame = new CGRect(210, 40, 90, 40);
    saveButton.SetTitle("Save", UIControlState.Normal);
    saveButton.SetTitleColor(UIColor.FromRGB(11, 132, 66), UIControlState.Normal);
    saveButton.TouchUpInside += (sender, e) => {
        if (resultImage != null)
        {
            ImageEditingViewController(resultImage);
        }
        else
        {
            ImageEditingViewController(sourceImage);
        }                
    };
    View.Add(saveButton);

    labelC = new UILabel(new CGRect(10, 100, 90, 20));          
    labelB = new UILabel(new CGRect(10, 140, 90, 20));

    labelC.Text = "Contrast";           
    labelB.Text = "Brightness"; 

    View.Add(labelC);           
    View.Add(labelB);

    sliderC = new UISlider(new CGRect(100, 100, 210, 20));       
    sliderB = new UISlider(new CGRect(100, 140, 210, 20));

    sliderC.MinValue = 0;
    sliderC.MaxValue = 4;
    sliderC.Value = 1;

    sliderB.MinValue = -1;
    sliderB.MaxValue = 1;
    sliderB.Value = 0;           

    // update the image in 'real time' as the sliders are moved
    sliderC.ValueChanged += HandleValueChanged;     
    sliderB.ValueChanged += HandleValueChanged;

    View.Add(sliderC);           
    View.Add(sliderB);

    imageView = new UIImageView(new CGRect(10, 200, View.Bounds.Width - 20, View.Bounds.Height - 200));            
    displayImage = sourceImage;
    imageView.Image = displayImage;
    View.Add(imageView);            
}

void HandleValueChanged(object sender, EventArgs e)
{   // use the low-res version
    imageView.Image = AdjustImage(displayImage);
    if (resultImage != null)
    {
        resultImage.Dispose();
    }                       
    resultImage = imageView.Image;
}

CIContext context;
CIColorControls colorCtrls; //CIFilter

UIImage AdjustImage(UIImage image)
{           
        if (colorCtrls == null)
            colorCtrls = new CIColorControls() { Image = CIImage.FromCGImage(image.CGImage) };
        else
            colorCtrls.Image = CIImage.FromCGImage(image.CGImage);

        if (context == null)
            context = CIContext.FromOptions(null);

        colorCtrls.Contrast = (float)Math.Round(sliderC.Value, 1);
        colorCtrls.Brightness = (float)Math.Round(sliderB.Value, 1);            

      using (var outputImage = colorCtrls.OutputImage)
        {
            var result = context.CreateCGImage(outputImage, outputImage.Extent);
            return UIImage.FromImage(result);
        }       

}

public void ImageEditingViewController(UIImage filteredImage)
{
    if (filteringDelegate != null)
    {
        filteringDelegate.ImageViewControllerDidFinish(filteredImage);
    }
    DismissViewController(false, null);           
}
}
有没有办法解决这个问题?
谢谢

设置“slider.Continuous=false”解决了该问题,该问题基于滑块的最后一个值显示图像,而不是存储每个值的更改。

是否可以附加详细的错误消息?顺便说一句,您可以尝试调试您的应用。@ColeXia MSFT'2018-06-04 08:33:17.002 MobileApp.UI.iOS[19733:5710577]获得内存压力通知(非关键)2018-06-04 08:33:22.527 MobileApp.UI.iOS[19733:5710577]获得内存压力通知(关键)线程已完成:#11线程已启动:#16线程0xb已退出,代码为0(0x0)。应用程序已被终止。无法停止应用程序:客户端IDB490753在为主题xvs/idb/4.9.0.753/Stop-app执行回复时出错。应用程序已终止。“@ColeXia MSFT它说探查器只能在VS Enterprise上,我使用VS professional。