是否有核选择'从图像阵列中释放图像?我想播放第一个animation1(ImageSet1),然后在完成块中删除这个动画,然后加载并播放第二个animation2(ImageSet2),依此类推:清洗,冲洗,重复 - 你得到它:)
首先,我定义了ViewController的实例变量:
var animation1: [UIImage] = []
var animation2: [UIImage] = []
var animation3: [UIImage] = []
然后我为每个动画创建一个动画数组:
func createImageArray(total: Int, imagePrefix: String) -> [UIImage]{
var imageArray: [UIImage] = []
for imageCount in 0..<total {
let imageName = "\(imagePrefix)-\(imageCount).png"
let image = UIImage(named: imageName)!
imageArray.append(image)
}
return imageArray
}
然后我设置了动画值:
func animate(imageView: UIImageView, images: [UIImage]){
imageView.animationImages = images
imageView.animationDuration = 1.5
imageView.animationRepeatCount = 1
imageView.startAnimating() }
animation1 = createImageArray(total: 28, imagePrefix: "ImageSet1")
animation2 = createImageArray(total: 53, imagePrefix: "ImageSet2")
animation3 = createImageArray(total: 25, imagePrefix: "ImageSet3")
最后调用animate函数
func showAnimation() {
UIView.animate(withDuration: 1, animations: {
animate(imageView: self.animationView, images: self.animation1)
}, completion: { (true) in
// Release the Images from the Array
})
}
我想从完成块中的图像阵列中释放图像以降低我的内存占用量,但我似乎无法使其工作,我已尝试下面的所有四个示例,但没有效果关于内存占用:
func showAnimation() {
UIView.animate(withDuration: 1, animations: {
animate(imageView: self.animationView, images: self.animation1)
}, completion: { (true) in
self.animation1 = [] // is this correct?
self.animationView.image = nil // also doesn't work
self.animationView.removeFromSuperview() // also doesn't work
self.animation1 = nil // also doesn't work
})
}
在完成块之后,我将animation1数组设置为[]并且它确实删除了动画(你不能再看到它)但是内存占用仍然完全相同(我也试过了另一个)三个选项)。
通过以上所述,内存占用空间不断增加。每次我添加下一个动画时它最终会导致操作系统终止App
即使更改ViewControllers,数组仍然将图像保存在内存中
感谢您的帮助:)
答案 0 :(得分:0)
UIImage(命名:)将始终将图像保存在内存堆栈中,除非需要更多内存和足够的时间来解除分配。
为了从内存中释放图像,您应该使用其他构造函数:UIImage(contentsOfFile :)并将图像保存在文件夹而不是资源管理器中。也许数据会起作用,但我不确定。
临时/大型资源将消耗堆,您应该使用“临时保存”方法(如contentsOfFile)将其从内存中清除。