최근 PHAssets를 사용하여 프로젝트의 이전 자산을 대체합니다. 그러나 내 그림을 사용하여 일부 그림의 크기를 조정할 때 일반적으로 충돌이 발생합니다. 디버그 모드를 사용하면 메모리 문제라는 것을 알았습니다. 내가 심지어 방법은 완료 생각 코드drawInRect를 사용하여 그림의 크기를 조절하는 메모리
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)]
실행이 그리고 그것은 무료로 살고 있고하지 않을 때는 50M에 대해 증가 사진을
+(UIImage*)scaleRetangleToFitLen:(UIImage *)img sWidth:(float)wid sHeight:(float)hei{
CGSize sb = img.size;;
if (img.size.height/img.size.width > hei/wid) {
sb = CGSizeMake(wid,wid*img.size.height/img.size.width);
}else{
sb = CGSizeMake(img.size.width*hei/img.size.height,hei);
}
if (sb.width > img.size.width || sb.height > img.size.height) {
sb = img.size;
}
UIImage* scaledImage = nil;
UIGraphicsBeginImageContext(sb);
[img drawInRect:CGRectMake(0,0, sb.width, sb.height)];
scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
img = nil;
return scaledImage;
}
메모리의 크기를 조정하기 위해 아래의 코드를 사용합니다. 너비와 높이가 304 * 228, 이미지 원본 크기는 약 3264 * 2448, 반환되는 이미지는 304 * 228이며, 이는 내가 바라는 실제 이미지가 단지 304 * 228 크기의 이미지라는 것을 의미하지만, 50 + M 메모리 .. drawInRect : 함수를 사용하는 메모리를 해제 할 수있는 방법이 있습니까? (@autoreleasepool이 작동하지 않습니다 ~)
당신의 응답에 감사드립니다. 코드는 다음과 같습니다 : (더 나은 독서를 위해 아래에 코멘트에 내 코드를 추가하고 있습니다) – AFu
위 코드가 내 대답에 있습니다, 지금은 "UIImage * ti = [[ pv.image.image copy]; " 대신에 "UIImage * ti = pv.image.image;"하지만 작동하지 않습니다. 그것은 복사 개체와 원래 개체가 동일한 이미지에 연결되어있는 것처럼 보입니다. 이미지를 그리면 메모리가 증가하지만 원본 개체는 무료로 설정되지 않으므로 메모리가 해제되지 않습니다. 이런 종류의 상황 (UIImageView 객체는 35M 버전이 필요하지 않지만 draw 메소드를 사용하여 35M으로 가져온 후 35M 버전을 어떻게 작게 설정할 수 있습니까?) – AFu
3264 * 2448 크기의 이미지는 처음에는 작은 버전을 사용해야하므로 무승부가 그렇게 많이 증가하지 않습니다 ~ ~ – AFu