J'ai créé une méthode pour redimensionner une image. Quand il redimensionne une image dans le tableau d'images, cela devient trop de mémoires (par exemple 200MB ~ 300MB) en particulier lorsqu'une image est une image de haute qualité (iPhone6 / 6s). Mon projet est en ARC. Si je veux le faire, comment dois-je le coder? S'il vous plaît apprenez-moi comment "immédiatement" ou "forcé" de sortie "trimmedImage" instance. Je trouve cela par Instruments (CGImage mange beaucoup de mémoire). J'ai essayé d'utiliser @autoreleasepool, trimmedImage = nil; et [trimmedImage release] ;, mais ils fonctionnent également mal (pas de mémoire trimmedImage).Libération de la mémoire lors du redimensionnement de UIImage dans la phrase
+ (void)cropImages: (NSArray *)images {
for (__weak UIImage *image in images) {
UIImage *resizedImage = [self cropRectImage:image];
}
}
+ (UIImage *)cropRectImage: (UIImage *)image {
float w = image.size.width;
float h = image.size.height;
CGRect rect;
if (h <= w) {
float x = w/2 - h/2;
float y = 0;
rect = CGRectMake(x, y, h, h);
}else {
float x = 0;
float y = h/2 - w/2;
rect = CGRectMake(x, y, w, w);
}
CGImageRef cgImage = CGImageCreateWithImageInRect(image.CGImage, rect);
UIImage *trimmedImage = [UIImage imageWithCGImage:cgImage];
CGSize newSize = CGSizeMake(320, 320);
UIGraphicsBeginImageContext(newSize);
UIImage *resizedImage = nil;
[trimmedImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
// TODO: ここでAutoReleaseされるはずだが... (http://vladimir.zardina.org/2010/05/resizing-uiimage-objects/)
resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
image = nil;
cgImage = nil;
return resizedImage;
}
Merci beaucoup! C'est très important. Je remplace mon code (cgImage = nil) avec votre code (CGImageRelease). Mais cela ne réduit pas la mémoire de mon application. UIImage {3000, 2002} pour - phrase Roop 1 → 98,9 MB roop 2 → 148,1 MB roop 3 → 171,4 MB ... roop 6 → 280 MB (parfois accident) Est-ce que CGImageRelease libération sa mémoire immédiatement? Je veux le réduire. Avez-vous d'autres bonnes idées? – masuhara