-2
以下のコードを実行するとメモリリークが発生します。私はまだnewImage
オブジェクトを使用していないか、持っていません。iOS:UIImageを拡大縮小しようとするとメモリリークが発生する
for image in imageArray {
autoreleasepool {
let newImage = image.scalingWith(targetSize: CGSize(width: 500, height: 500))
}
}
、ここUIImage
延長でのスケールの方法です:
func scaleWith(targetSize: CGSize, backgroundColor: UIColor = UIColor
.white) -> UIImage? {
let imageSize = size
var scaleFactor: CGFloat = 0.0
let scaledWidth = targetSize.width
let scaledHeight = targetSize.height
var thumbnailPoint = CGPoint.zero
if imageSize.equalTo(targetSize) { return self }
let widthFactor = targetSize.width/imageSize.width
let heightFactor = targetSize.height/imageSize.height
if widthFactor > heightFactor {
scaleFactor = heightFactor
thumbnailPoint.x = (targetSize.width - scaleFactor * imageSize.width) * 0.5;
} else {
scaleFactor = widthFactor
thumbnailPoint.y = (targetSize.height - scaleFactor * imageSize.height) * 0.5;
}
UIGraphicsBeginImageContext(CGSize(width: scaledWidth, height: scaledHeight))
let context = UIGraphicsGetCurrentContext()
let bounds = CGRect(x: 0, y: 0, width: scaledWidth, height: scaledHeight)
context!.setFillColor(backgroundColor.cgColor)
context!.fill(bounds)
var thumbnailRect = CGRect.zero
thumbnailRect.size.width = imageSize.width * scaleFactor;
thumbnailRect.size.height = imageSize.height * scaleFactor;
thumbnailRect.origin = thumbnailPoint
draw(in: thumbnailRect)
let resultImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return resultImage
}
誰も私にいくつかのアドバイスを与えることができますか?
ありがとうございました。私はコードをテストするためにデバイスを使用しましたが、Instrumentsは使用しませんでした。だから私は再びInstrumentsで試しました。今はすべてがOKだと思う。ありがとうございました。 –