我已经写了一个小的iOS应用程序,它可以根据存储在Documents目录(在Files下)中的图像创建幻灯片。
它工作正常,但我 * 认为 * 它正在泄漏内存。我这样说的原因是因为在运行它时,我看到每次替换图像时XCode中的内存都会增加。
不是很复杂。我有:
override func viewDidLoad() {
super.viewDidLoad()
self.imageView.contentMode = .scaleAspectFill
self.imageView.frame = CGRect(
x: 0,
y: 0,
width: self.bounds.size.width,
height: self.bounds.size.height
)
view.addSubview(self.imageView)
/* Loads the filenames of the images */
loadImages()
displayNext()
Timer.scheduledTimer(
timeInterval: self.cycleSeconds,
target: self,
selector: #selector(displayNext),
userInfo: nil,
repeats: true
)
}
@objc
func displayNext() {
let imageURL = self.documentsURL.appendingPathComponent(self.imageNames[self.imageIndices[self.i]])
replaceImage(with: imageURL)
if self.i + 1 == self.imageNames.count {
shuffleImageIndices()
self.i = 0
} else {
self.i = self.i + 1
}
}
代码displayNext()
最终调用下面的代码来转换到下一个图像:
func replaceImage(with imageURL: URL) {
assert(imageURL.isFileURL)
let nextImage = UIImage(named: imageURL.path)
UIView.transition(
with: self.imageView,
duration: 0.1,
options: .transitionCrossDissolve,
animations: { self.imageView.image = nextImage },
completion: nil
)
}
不知何故,所有这些都泄漏了内存,我似乎不知道如何摆脱它。
1条答案
按热度按时间6fe3ivhb1#
Image(named:)
缓存图像。因此,您很可能会看到由于该高速缓存的内存消耗而导致的内存增加。检查documentation。你应该使用
UIImage(contentsOfFile:)
的构造函数。讨论:
使用缓存版本没有任何问题。图像将被缓存,这将提高性能,但可能会消耗更多内存。这不是内存泄漏,而是预期行为。该高速缓存本身不会因内存消耗而导致应用崩溃,它会在使用大量内存时清除缓存,内存消耗会下降。