行业动态
iOS开发中,如何加载图片才能有效的控制内存?
2021-01-25

在IOS的开发中,将不可避免地使用显示图片。但是,在您的APP中使用了大量图片后,您将在检查内存时发现,哇!!!内部

内存已超过200M或更多(仿真器中的内存未设置上限)。这时,iPhone4很容易导致程序崩溃。如果内存控制能力很差,该程序甚至会在6s内崩溃。

发生这种情况时,我认为您必须使用以下方法

let newImageData = UIImageJPEGRepresentation(newImage, 0.5)

这种类似的方法可以减小图片的尺寸。但是效果

ios表单上传图片_ios 上传图片内存溢出_ios 图片上传慢

。一张30M的图片,压缩后还剩下15M?它仍然太大,因此十张图片将为150M,加上一些基本功能,APP内存超过200M并不是问题。当您的程序进入时一段时间未使用背景。再次输入应用程序时,您需要重新加载应用程序。但是ios 上传图片内存溢出,您会发现一些优秀的应用程序在进入后台后再次唤醒时,会恢复到进入后台之前的状态。

为什么?因为在您的APP进入后台一段时间后,系统占用的内存会自动清除...因为您的APP占用的内存太大。 IOS系统具有出色的内存清理机制,使系统随时都有足够的可用内存。进入后台的一段时间后,某些占用过多内存的应用程序将被系统关闭,并释放内存。因此,当您再次输入该应用程序时,它不会恢复到以前的状态。而是重新加载。

使用时

ios 图片上传慢_ios表单上传图片_ios 上传图片内存溢出

UIImagePickerController

此方法调用图片库和照相机时ios 上传图片内存溢出,您选择的图片是原始图片。该图片占用很大的存储空间。所选照片将被载入内存。连续选择多张图片将直接使程序崩溃。即使使用UIImageJPEGRepresentation或类似的图片压缩方法也无法解决基本问题。那么如何加载图片以有效控制内存呢?

答案是帆布

ios表单上传图片_ios 图片上传慢_ios 上传图片内存溢出

UIGraphicsBeginImageContext

选择图片时,可以根据iPhone的屏幕尺寸进行截图。生成的图片将从原来的800W像素减少到手机屏幕的像素。再次执行压缩,并获得结果。图片的尺寸为图片尺寸的10-25K。画质如何?它与原始图片完全相同,但不缩放手机。内存立即无压力。尤其是对于即时聊天,发送图片,保存数据以及图片清晰。

代码如下:

ios 上传图片内存溢出_ios 图片上传慢_ios表单上传图片

func useImage(image: UIImage) -> NSData {
        //实现等比例缩放
        let hfactor = image.size.width / screnWidth;
        let vfactor = image.size.height / screnHeight;
        let factor = fmax(hfactor, vfactor);
        //画布大小
        let newWith: CGFloat = image.size.width / factor
        let newHeigth: CGFloat = image.size.height / factor
        let newSize = CGSize(width: newWith, height: newHeigth)
        
        UIGraphicsBeginImageContext(newSize)
        image.drawInRect(CGRect(x: 0, y: 0, width: newWith, height: newHeigth))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        //图像压缩
        let newImageData = UIImageJPEGRepresentation(newImage, 0.5)
        return newImageData!
    }

以上想法来自我的朋友成博勤。


393701618