IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Fuite mémoire sur iPad [iPad]


Sujet :

Objective-C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut Fuite mémoire sur iPad
    Bonjour,

    J'ai un problème avec l'adaptation d'une appli iPhone pour l'iPad. C'est une appli plutôt simple style galerie d'images, parfaitement fonctionnelle sur iPhone.
    Mon problème est que ma version iPad, qui fonctionne parfaitement sur le simulateur, se plante sur l'appareil après l'affichage de plusieurs images, avec cette erreur :
    Program received signal: “0”.

    The Debugger has exited due to signal 10 (SIGBUS).The Debugger has exited due to signal 10 (SIGBUS).
    Si j'ai bien compris la doc, ça signifie qu'il y a une fuite de mémoire. Pourtant, mon code est sensé libérer les images une fois chargées et je ne vois pas ce que j'ai manqué.

    Voici les fonctions gérant le passage à l'image suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    // Transition vers l'image suivante
    -(void)nextImage {
    	transition = YES;
    	[UIView beginAnimations:nil context:nil];
    	[UIView setAnimationDuration:animDuration];
    	[UIView setAnimationDelegate:self];
    	[UIView setAnimationDidStopSelector:@selector(nextImageEnd:finished:context:)];
    	if (landscape) {
    		currImageView.center = CGPointMake(-screenWidth/2, currImageView.frame.size.height/2);
    		nextImageView.center = CGPointMake(screenWidth/2, nextImageView.frame.size.height/2);
    	}
    	else {
    		currImageView.center = CGPointMake(-screenWidth/2, screenHeight/2);
    		nextImageView.center = CGPointMake(screenWidth/2, screenHeight/2);
    	}
    	[UIView commitAnimations];
    }
     
    // Fin de la transition vers l'image suivante -> changement des vues
    -(void)nextImageEnd:(NSString *)animationID finished:(BOOL)finished context:(void *)context {
    	[prevImageView removeFromSuperview];
    	[currImageView removeFromSuperview];
    	[nextImageView removeFromSuperview];
     
    	prevImageView = currImageView;
    	prevImageWidth = currImageWidth;
    	prevImageHeight = currImageHeight;
    	prevMinScale = currMinScale;
    	currImageView = nextImageView;
    	currImageWidth = nextImageWidth;
    	currImageHeight = nextImageHeight;
     
    	currMinScale = nextMinScale;
    	if (currMinScale==1.0)
    		zoomMax=YES;
    	else if (landscape==NO) {
    		float ratioW=(float)screenWidth/currImageWidth;
    		float ratioH=(float)screenHeight/currImageHeight;
    		scaleOffset=CGPointMake(0.0,0.0);
    		if (ratioW<ratioH) {
    			currMinScale=ratioW;
    			scaleOffset.x=0;
    			scaleOffset.y=(screenHeight-currImageHeight*currMinScale)/2;
    		} 
    		else { 
    			currMinScale=ratioH;
    			scaleOffset.x=(screenWidth-currImageWidth*currMinScale)/2;
    			scaleOffset.y=0;
    		}
     
    		currImageView.transform = CGAffineTransformMakeScale(currMinScale, currMinScale);
    		zoomMax=NO;
    	}
     
    	prevImg = currImg;
    	currImg++;
    	[self updateCurrImg:currImg];
     
    	[imageContainer addSubview: prevImageView];
    	[imageContainer addSubview: currImageView];
     
    	if (currImg<totImg) {
    		nextImg = currImg+1;
    		//[nextImageView release];
    		UIImage *img=[[UIImage alloc] initWithContentsOfFile:[images objectAtIndex:nextImg]];
    		nextImageView = [[UIImageView alloc] initWithImage:img];
    		[img release];
    		nextImageWidth=nextImageView.frame.size.width;
    		nextImageHeight=nextImageView.frame.size.height;
     
    		if (landscape) {
    			if (nextImageWidth<screenWidth)
    				nextMinScale=1.0;
    			else {
    				nextMinScale=(float)screenWidth/nextImageWidth;			
    				nextImageView.transform = CGAffineTransformMakeScale(nextMinScale, nextMinScale);
    			}
    			nextImageView.center=CGPointMake(screenWidth*3/2, nextImageView.frame.size.height/2);
    		}
    		else {
    			if (nextImageWidth<screenWidth || nextImageHeight<screenHeight)
    				nextMinScale=1.0;
    			else {
    				float ratioW=(float)screenWidth/nextImageWidth;
    				float ratioH=(float)screenHeight/nextImageHeight;
    				if (ratioW<ratioH)
    					nextMinScale=ratioW;
    				else
    					nextMinScale=ratioH;
    				nextImageView.transform = CGAffineTransformMakeScale(nextMinScale, nextMinScale);
    			}
    			nextImageView.center=CGPointMake(screenWidth*3/2, screenHeight/2);
    		}
    		[imageContainer addSubview: nextImageView];
    	}
    	transition = NO;
    }
    Merci de votre aide.

  2. #2
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    SIGBUS = crash.
    Une fuite de mémoire peut te bouffer de la mémoire pour rien mais ne te fera pas planter l'appli.


    Par contre j'ai aucune idée de l'origine de ton crash.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut
    La fuite venait du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nextImageView = [[UIImageView alloc] initWithImage:img];
    qui allouait de la mémoire sans libérer celle utilisée par l'image précédente, donc à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nextImageView.image = img;

  4. #4
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Eviter une fuite mémoire sur un thread
    Par BuzzLeclaire dans le forum Langage
    Réponses: 9
    Dernier message: 03/11/2011, 11h06
  2. Problème de fuite mémoire sur un FLV
    Par p3ga5e dans le forum Flash
    Réponses: 0
    Dernier message: 05/10/2010, 16h15
  3. Fuite mémoire sur composant tiers
    Par Swann dans le forum C#
    Réponses: 1
    Dernier message: 10/06/2009, 20h59
  4. Fuite mémoire sur composants Indy 9.0.50
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 30/04/2009, 15h47
  5. Problème de fuite mémoire sur un idFTP
    Par jeromelef dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/07/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo