내가 다음 코드를 사용하여 for
루프 내부의 여러 UIImage
객체의 크기를 조정하려고 누출의 원인이되는 :아이폰 OS 이미지 크기를 조정하면 메모리가
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:
의 모든 반복을 통해 증가 참조 . 나는 여기에 끔찍한 기억 누출을 보지 못했지만, 나도 잘 모르겠다.
내 메모리 사용이이 기능에서 증가하는 이유가 누구에게 보이나요? 나는 여기서 잃어 버렸다. 불행히도 UIImage
은 imageArray
안에 있으므로 가능한 한 메모리를 보수적으로 사용해야합니다.
크기가 조정 된 이미지를 만든 다음에 해제하려면 '@ autoreleasepool' 블록에서 루프 본문을 래핑하십시오. 그렇지 않다면 직선 루프보다 자원 집약적 인 방법을 찾아야합니다. – CodaFi
@CodaFi 내 프로젝트는 ARC이므로 어디에도 명시 적으로 공개하지 않습니다. 내가 있어야 할까? – Brett
또한 Instruments를 사용하여 Allocations Leaks 도구를 배포하는 방법을 배우고 호출자가 참조 횟수를 늘리거나 줄이는 목록으로 누출을 확인하십시오. 귀중한 학습 도구이자 디버깅 도구입니다. – RobP