我嘗試使用下面的代碼來調整一個for
循環中幾個UIImage
對象:的iOS - 調整圖像大小導致內存泄露
CGFloat scaledToWidth:resized_width = 160.0;
for(UIImage *img in imageArray) {
UIImage *resizedImageSecond = [self resizeImage:img scaledToWidth:resized_width];
//Do something with resizedImageSecond
}
-(UIImage*)resizeImage:(UIImage*) sourceImage scaledToWidth: (float) i_width
{
float oldWidth = sourceImage.size.width;
float scaleFactor = i_width/oldWidth;
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight));
[sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
但我看到我的內存使用量迅速超過resizeImage:scaledToWidth:
每次迭代增加。我沒有看到任何明顯的內存泄漏,但我也不確定。
有沒有人看到任何理由爲什麼我的內存使用會增加這個功能?我在這裏不知所措。不幸的是,我在imageArray
內部有大約100 UIImage
,所以我需要儘可能保守內存。
如果您在創建後釋放調整大小的圖像,則將循環的主體包裝在一個'@ autoreleasepool'塊中。如果不是,那麼您需要找到比直線循環更少的資源密集型方法。 – CodaFi
@CodaFi我的項目是ARC,所以我沒有明確地將它釋放到任何地方。我可以做? – Brett
另外,使用儀器並學習部署Allocations Leaks工具,並查看具有哪些呼叫者正在遞增和遞減重新計數的列表的泄漏。這是一個寶貴的學習工具和調試工具。 – RobP