2011-04-13 3 views
0

J'ai un catalogue développé pour l'iPhone qui est ma première application. A cause de cela, j'ai des problèmes avec les fuites de mémoire et l'application tombe en panne quand j'ai plus de 55 photos dans le catalogue. (Je vais expliquer quand il plantage)iPhone NSMutableArray vs SQLite

J'ai déjà testé avec les outils de performance de fuites et j'ai corrigé avec succès les fuites, mais mon application se bloque toujours.

Ma classe Data a 5 NSMutableArrays. 1 ont 50 éléments UIImage pour Portrait. La seconde possède 25 éléments UIImage pour Landscap (le catalogue utilise 2 portraits en 1 paysage). D'autres ont 50 NSNumber pour la position de l'image de référence du tableau portrait à paysage Array. Les deux autres ont 50 éléments NSString avec (1) nom et (2) adresse des images d'icônes. Un objet de classe Data est créé dans AppDelegate (chargement de l'application).

Je lance le catalogue en Portrait, en faisant les vues en passant le tableau Portrait (avec UIImages). Lorsque l'appareil tourne à gauche, je refais les vues (en libérant les anciennes vues) en passant le paysage Array. En xCode, tout fonctionne bien !!! Dans l'appareil, quand je tourne l'appareil à gauche (pour refaire les vues), parfois (j'ai remarqué quand j'ai d'autres applications ouvertes) l'application se brisent avec ce message: "Programme reçu signal:" 0 " Data Formatters temporairement indisponible"

Je sais que ce message se réfère à la mémoire Fuites problème, donc ma question est:

en utilisant SQLite pour stocker mes données (en fait dans NSMutableArrays) Je vais augmenter les performances de la mémoire? Je suis novice en SQLite pour iPhone. Y a-t-il une autre solution pour stocker mes données?

Merci à tous, les gars !!!

Répondre

0

Cette question est moins sur NSMutableArray s vs SQLite et plus sur l'utilisation de la mémoire. Un UIImage consommera généralement beaucoup de mémoire et devrait être libéré quand il n'est pas nécessaire, ce qui est généralement quand il n'est pas visible. Votre application peut avoir des fuites mais se bloquer. Vous devrez vous inscrire aux notifications UIApplicationDidReceiveMemoryWarningNotification et agir en conséquence. UIViewController s répond déjà à - (void)didReceiveMemoryWarning que vous pouvez remplacer. Maintenant, pour stocker ces images sur le disque lorsque vous avez besoin de libérer de la mémoire, vous pouvez utiliser SQLite ou ce que je recommanderais, il suffit de créer un dossier cache.

+0

Merci! Cette réponse me fait gagner du temps et ne pas faire d'erreurs en changeant ma méthode de stockage. Le seul problème est que je suis relativement novice en Objective-C et je ne sais pas très bien comment gérer la mémoire. J'ai lu des tutoriels Apple, mais ne change jamais. J'ai mes tableaux avec UIImages créés dans la méthode de départ délégué (avec [UIImage alloc]). Après quand je montre ces UIImages, j'utilise [myUIImage release]; et l'application se bloque pour référence brisée. Y at-il un autre tutoriel sur la façon d'utiliser la gestion de la mémoire dans l'iPhone qui ne vient pas d'Apple? – mausalamon

0

J'aime SQLite comme une solution. Il est facile de fournir une base de données pré-remplie, et au-delà de cela, vous n'avez qu'à connecter votre application à des méthodes qui peuvent ajouter/supprimer/mettre à jour des enregistrements.

Votre problème ne va pas être résolu avec SQLite - le problème est la gestion de la mémoire. Faites-en une erreur et peu importe où vous stockez vos données.

Séparez les 2 problèmes - affichage vs stockage. Faites en sorte que l'affichage fonctionne correctement, puis informez-vous sur l'emplacement où stocker les données.

+0

Merci! Ma réponse est ci-dessus! – mausalamon