J'essaie d'ajouter dynamiquement des images à un ScrollView. Avant d'ajouter je vérifie s'il y a des sous-vues dans le ScrollView et les supprime dans une boucle for. Lorsque je lance l'imageview, j'obtiens une erreur d'exécution indiquant que j'essaie d'accéder à une instance désallouée. Si je retire la déclaration de libération de l'application fonctionnera correctement, mais « construire et d'analyser » montre une fuite, car e compte de référence de imageview ne diminue pas ..Fuite d'objet: ajout et suppression de UIImageView à un UIScrollView
if ([scrollView.subviews count]>0){
for (int i=0; i<[scrollView.subviews count]; ++i) {
[[scrollView.subviews objectAtIndex:i] removeFromSuperview];
}
}
//Making a scroller with results
int scrollWidth = 0.0f;
int scrollHeight = 0.0f;
for (int i = 0; i<previewImages.count;++i)
{
UIImage *image=[previewImages objectAtIndex:i];
scrollWidth = scrollWidth + image.size.width; // Width of all the images
if (image.size.height > scrollHeight)scrollHeight= image.size.height; // Maximum image height
[image release];
}
float xC = 0.0f;
for (int i=0; i<previewImages.count; ++i) {
UIImage *image=[previewImages objectAtIndex:i];
UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(xC, 0.0f, image.size.width, image.size.height)];
UILabel *subScript = [[UILabel alloc] initWithFrame:CGRectMake(xC, image.size.height-30.0f, image.size.width,30.0f)];
subScript.textColor = [UIColor whiteColor];
subScript.backgroundColor = [UIColor colorWithWhite:0.5f alpha:0.5f];
subScript.text = [imagePaths objectAtIndex:i];
imageview.image = image;
xC = xC + image.size.width;
[image release];
[scrollView addSubview:imageview];
[imageview release];
[scrollView addSubview:subScript];
[subScript release];
}
[scrollView setContentSize:CGSizeMake(scrollWidth , scrollHeight)];
Toute suggestion au sujet de la fuite de mémoire ou les meilleures pratiques générales pour ajouter et supprimer des vues d'un tableau dans un scrollView sont très appréciés!
Salut Tia, merci pour la réponse rapide. Je comprends ce que vous dites à propos de l'itération inverse pour vider le tableau, mais pourriez-vous élaborer sur votre deuxième remarque? En outre, cela n'a pas résolu la fuite de mémoire. – Wicketman
Je veux dire garder la vue dans NSArray privé après init vos vues, donc vous possédez le tableau alors c'est plus facile à gérer. A propos de la fuite, je ne vois rien de mal avec votre extrait de code. Êtes-vous vraiment sûr qu'il y a une fuite? Comment l'avez-vous testé? – tia
J'ai utilisé NSZombiesEnabled, qui me montre dans la console de débogage: *** - [UIImage release]: message envoyé à l'instance libérée. – Wicketman