2009-06-17 2 views
0

Je développe un jeu dans lequel je dois charger des images sur le balayage de doigt. Pour cela j'ai chargé toute l'image 22 de la taille (788x525) au chargement de la vue elle-même. Ensuite, sur le doigt, je viens d'ajouter une image sur la vue.Application se brisant sur l'iPhone

Cela fonctionne très bien sur iTouch mais sur le jeu iPhone se bloque après avoir montré près de 12 images.

Voici comment j'ai ajouté des images, graphicsArray est NSMUTableArray.

for (int i=0; i<=totalNoofPages;i++){ 
    NSString * graphicsFileName = @"Page"; 
    graphicsFileName = 
       [graphicsFileName 
       stringByAppendingString:[NSString stringWithFormat:@"%d", i]]; 
    UIImage *image = 
       [[UIImage alloc] initWithContentsOfFile: 
       [[NSBundle mainBundle] pathForResource:graphicsFileName 
             ofType:@"jpg"]]; 
    GraphicsImages = 
       [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 480,320)]; 
    GraphicsImages.image = image; 
    [image release]; 
    [GraphicsImages setCenter:center]; 

    GraphicsImages.transform = CGAffineTransformMakeRotation(M_PI/2); 
    [graphicsArray insertObject:GraphicsImages atIndex:i]; 
} 

et sur le balayage du doigt j'écris, pageNo est le nombre de pages qui seront affichées.

GraphicsImages = [graphicsArray objectAtIndex:pageNo]; 
[self addSubview:GraphicsImages]; 

Est-il possible de libérer l'image chargée précédente de la vue sous car il pourrait être conservé sur pile ou est-il dû à la grande taille de l'image ????

S'il vous plaît aidez-moi dans cette situation.

Merci d'avance.

Cordialement, Vishal.

Répondre

0

Êtes-vous plante en raison d'un manque de mémoire?

Vous pouvez essayer de précharger les images & précédentes et actuelles, puis de les libérer dès que possible. Le chargement de 22 images en mémoire prend beaucoup de place.

+0

Bonjour Ben. Merci pour votre réponse. J'ai essayé cela aussi pour charger l'image seulement quand les moyens requis sur la page particulière chargent l'image respective seulement. Toujours résultat le même. Il se bloque alors sur iTouch aussi. Cordialement, Vishal. –

+0

Salut Ben, Merci pour votre réponse. Je viens d'ajouter une seule image à la fois comme j'ai eu besoin. Pendant le chargement de l'image suivante, j'ai supprimé l'image de la manière suivante: [GraphicsImages removeFromSuperview]; [Version GraphicsImages]; Donc le nombre de retenues de GraphicsImages est 0 et je peux ajouter l'image suivante. En faisant cela il n'y a pas de problème d'application ralentir après un long jeu aussi. Encore une fois merci pour votre réponse. Cordialement, Vishal. –

0

Pouvez-vous fournir l'erreur que vous obtenez lorsque l'application se bloque? Savoir quelle exception est déclenchée aidera beaucoup à déterminer exactement ce qui se passe.

Je peux vous dire que vous ne libérez pas la variable GraphicsImages dans votre boucle for, ce qui provoque des fuites de mémoire. J'imagine que ce n'est pas assez pour causer un accident, cependant. Dans tous les cas, faites ceci:

[ graphicsArray insertObject:GraphicsImages ]; 
[ GraphicsImages release ]; 

Notez que vous n'avez pas besoin de spécifier l'indice d'insertion dans votre cas parce que les articles seront ajoutés successivement. En outre, lorsque vous insérez un objet dans un tableau, il s'agit de retained, vous pouvez donc le libérer ultérieurement.

+0

Salut Lucas, Merci pour votre réponse. Je viens d'ajouter une seule image à la fois comme j'ai eu besoin. Pendant le chargement de l'image suivante, j'ai supprimé l'image de la manière suivante: \t [GraphicsImages removeFromSuperview]; \t [Version GraphicsImages]; Donc, le nombre de retenues de GraphicsImages est 0 et je peux ajouter l'image suivante. En faisant cela il n'y a pas de problème d'application ralentir après un long jeu aussi. Encore une fois merci pour votre réponse. Cordialement, Vishal. –

Questions connexes