Contexte:développement iPhone - problème de mémoire UIImageView
Inspiré de l'exemple de code d'Apple ScrollViewSuite, j'ai créé une vue classe contrôleur qui affiche des vignettes d'image et une image sélectionnée. La hiérarchie des contrôles pour l'image « sélectionnée » est quelque chose comme ceci:
--> UIView
--> UIScrollView
--> UIImageView
code suivant est utilisé pour mettre le UIScrollView sur la vue:
imageScrollView = [[UIScrollView alloc] initWithFrame:frame];
[imageScrollView setBackgroundColor:[UIColor clearColor]];
[imageScrollView setDelegate:self];
[imageScrollView setBouncesZoom:YES];
[[self view] addSubview:imageScrollView];
... et le code suivant est utilisé pour configurer et ajouter UIImageView au UIScrollView:
// Custom method to return a UIImage from a URL string
UIImage *image = [UIImage newImageWithContentsOfURL:imageURL];
// first remove previous image view, if any
[[imageScrollView viewWithTag:MAIN_IMAGE_TAG] removeFromSuperview];
// set the new image view
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView setDelegate:self];
[imageView setTag:MAIN_IMAGE_TAG];
[imageScrollView addSubview:imageView];
[imageScrollView setContentSize:[imageView frame].size];
// choose minimum scale so image width fits screen
float minScale = [imageScrollView frame].size.width/[imageView frame].size.width;
[imageScrollView setMinimumZoomScale:minScale];
[imageScrollView setZoomScale:minScale];
[imageScrollView setContentOffset:CGPointZero];
// clear memory
[imageView release];
imageView = nil;
[image release];
image = nil;
est ici la méthode de la catégorie que je l'ai utilisé pour obtenir l'aide UIImage chaîne URL:
+ (UIImage *)newImageWithContentsOfURL:(NSString *)imageURL {
NSURL *url = [[NSURL alloc] initWithString:imageURL];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
UIImage *image = [[UIImage alloc] initWithData:data];
[data release];
[url release];
return image;
}
Problème: (approx.) L'effet de charger une image jpeg de taille 110 Kb est que la mémoire réelle de la demande passe de 12 Mo (approx.) 38 Mo (env.). J'étais déconcerté quand j'ai vu ça pour la première fois. Comment est-ce possible? Euh, et le résultat final: l'application se bloque sur iPhone 3G (occasionnellement).
Notez que les relevés de mémoire ont été effectués à l'aide de l'outil Moniteur de mémoire dans Instruments - lors du test de l'application sur le périphérique (pas sur le simulateur). Notez également que les instruments ne présentent aucune fuite de mémoire et que Static Analyzer ne signale aucun élément suspect.
J'ai besoin d'aide!
Il se bloque après 1 x charge d'image 110kb dans un imageView? – Zinc
Oui. 110 Ko image lorsqu'elle est chargée dans un imageView fait de la mémoire réelle tirer de 12 Mo à 38 Mo. – Mustafa