Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 调整UIImage大小时内存泄漏_Ios_Swift_Xcode_Memory Leaks_Uiimage - Fatal编程技术网

Ios 调整UIImage大小时内存泄漏

Ios 调整UIImage大小时内存泄漏,ios,swift,xcode,memory-leaks,uiimage,Ios,Swift,Xcode,Memory Leaks,Uiimage,关于这个话题,我已经读了很多文章,但我的问题仍然存在。 使用以下代码调整图像大小时: extension UIImage { func thumbnailWithMaxSize(image:UIImage, maxSize: CGFloat) -> UIImage { let width = image.size.width let height = image.size.height var sizeX: CGFloat = 0 var sizeY:

关于这个话题,我已经读了很多文章,但我的问题仍然存在。 使用以下代码调整图像大小时:

extension UIImage {
  func thumbnailWithMaxSize(image:UIImage, maxSize: CGFloat) -> UIImage {
    let width = image.size.width
    let height = image.size.height
    var sizeX: CGFloat = 0
    var sizeY: CGFloat = 0
    if width > height {
        sizeX = maxSize
        sizeY = maxSize * height/width
    }
    else {
        sizeY = maxSize
        sizeX = maxSize * width/height
    }

    UIGraphicsBeginImageContext(CGSize(width: sizeX, height: sizeY))
    let rect = CGRect(x: 0.0, y: 0.0, width: sizeX, height: sizeY)
    UIGraphicsBeginImageContext(rect.size)
    draw(in: rect)
    let thumbnail = UIGraphicsGetImageFromCurrentImageContext()!;

    UIGraphicsEndImageContext()

    return thumbnail

}


override func viewDidLoad() {
    super.viewDidLoad()

    let lionImage = UIImage(named: "lion.jpg")!

    var thumb = UIImage()

    autoreleasepool {
        thumb = lionImage.thumbnailWithMaxSize(image: lionImage, maxSize: 2000)
    }
    myImageView.image = thumb
}
…内存未释放。因此,当我浏览多个ViewController(例如使用PageViewController)时,我最终会收到内存警告,应用程序最终会崩溃。 我还尝试通过UIImage(contentsOfFile:path)加载图像,但没有成功。 有什么建议吗

问题在于:

UIGraphicsGetImageFromCurrentImageContext() 返回自动删除的UIImage。自动释放池将保留此映像,直到您的代码将控制权返回到runloop,而您很长一段时间都没有这样做。要解决此问题,请在使用后使
thumb=nil

var thumb = UIImage()

autoreleasepool {
   thumb = lionImage.thumbnailWithMaxSize(image: lionImage, maxSize: 2000)
   let myImage:UIImage = UIImage(UIImagePNGRepresentation(thumb));
   thumb = nil
}
myImageView.image = myImage

我注意到您的代码以两个上下文开头,但仅以一个上下文结尾

这是我的分机,基本上和你的一样。因为我没有内存问题,看起来这可能就是问题所在

extension UIImage {
    public func resizeToRect(_ size : CGSize) -> UIImage {
        UIGraphicsBeginImageContext(size)
        self.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();
        return resizedImage!
    }
}

不幸的是,设置thumb=nil并不能解决问题。内存仍然在增长。只有当我使用原始图像时,内存才会按预期释放。就是这样!非常感谢。