2010-02-26 3 views
1

J'ai effectué quelques tests de stress sur mon application Iphone. Les résultats sont ci-dessous. Je me demande si je devrais être inquiet et, si oui, ce que je pourrais faire à ce sujet.Quelques tests de stress sur mon application Iphone

Je règle une minuterie pour allumer une fois par seconde. Chaque fois que le temporisateur s'est déclenché, l'application a demandé des données XML au serveur. Lorsque les données sont arrivées, l'application a ensuite analysé les données et réaffiche la vue de la table affectée. Sur plusieurs essais, l'application a fait la moyenne environ 500 fois à travers la boucle avant de s'écraser. J'ai ensuite supprimé les étapes d'analyse et de réaffichage de la boucle ci-dessus. Maintenant, cela pourrait aller environ 800 fois.

J'ai mis en place une boucle pour réafficher à plusieurs reprises la vue de la table, sans rien télécharger. Dès qu'un nouvel affichage était terminé, le suivant commençait. Après 2601 boucles, l'application s'est écrasée.

Tous les nombres ci-dessus sont plus grands que ce qu'un utilisateur est susceptible de faire.

En outre, mon application ne dure jamais longtemps lorsque j'essaie de l'exécuter sur l'appareil sous les instruments. Donc, je ne peux pas obtenir des données utiles de cette façon. (Mais sans instruments cela dure assez longtemps, comme détaillé ci-dessus.)

+0

Comment ça plante? –

+0

"Signal reçu du programme: 0" –

Répondre

2

Je dirais que vous devez être très inquiet. La première règle de programmation est que l'utilisateur ne fera jamais ce que vous attendez.

choses à considérer:

  • méthodes accesseurs. Utilise les. Mettre en place propriétés pour tous les attributs et les accéder toujours avec les méthodes getter/setter appropriés:

.

object.property = some_other_object;  -OR- 
[object setProperty:some_other_object]; 

et

object = some_other_object.some_property; 
object = [some_other_object some_property]; 

Résister à la tentation de faire des choses comme:

property = some_other_object; 
[property retain]; 
  • -vous obtenir une sortie de ObjectAlloc? Il existe 4 outils de fuites de mémoire, les performances et les allocations d'objets. Aucun d'entre eux ne charge?
  • Qu'est-ce que vous obtenez lorsque l'application se bloque? EXEC_BAD_ACCESS ou une autre erreur?
  • Équilibré retient (copie alloc ou ) et relâchez. C'est une bonne idée de garder chaque allocation/copie équilibrée avec une libération/autorelease dans la même méthode . Si vous utilisez vos accesseurs TOUT LE TEMPS, le besoin pour faire des versions manuelles est rarement.
  • Autorelease va souvent cacher un vrai problème. Il est possible Autorelease peut masquer quelques problèmes d'allocation difficile . Vérifiez à nouveau votre utilisation de autorelease .

EDITED (Ajouté en fonction de votre code d'erreur) Basé sur votre réponse ci-dessus de "Signal reçu du programme: 0". Cela indique que vous n'avez plus de mémoire. Je commence par rechercher les cas que votre code fait quelque chose comme:

myObject = [[MyClass alloc] init]; 
[someMutableArray addObject:myObject]; 

et vous n'avez pas le « libérer » quand vous mettez le nouvel objet dans le tableau. Si ce tableau est alors libéré, l'objet, myObject, deviendra orphelin mais restera en mémoire de toute façon. Le moyen le plus simple de le faire est de grep pour tous vos messages "alloc"/"copy". Sauf dans des conditions extrêmement rares, il devrait y avoir une paire "release" "/ autorelease" dans la même fonction. Plus souvent qu'autrement, ce qui précède devrait être:

myObject = [[[MyClass alloc] init] autorelease]; 
[someMutableArray addObject:myObject]; 
+0

Votre réponse peut être résumée comme suit: Utilisez les modèles de gestion de mémoire Cocoa standard partout pour vous assurer que vous ne fuyez pas la mémoire – rpetrich

+0

À peu près tout. Dans le passé (je pense à OpenStep), j'ai réalisé plus de 50 000 programmes et je n'ai pas passé plus d'une journée sur les fuites et le nettoyage. Si vous suivez religieusement les règles, elles fonctionnent comme un charme. Ils rendent également les choses plus faciles à lire et à ramasser à des dates ultérieures. –

Questions connexes