Représentation des données
Hello ici,
Je ne savais pas trop où poster donc je tente ma chance ici. J'aurais une question d'ordre général à vous soumettre.
J'utilise actuellement sur le projet sur lequel j'ai décidé d'utiliser une plist (système de dictionnaire/tableau). Plus je code, plus la représentation des données devient complexe. Donc je me demande si le choix d'utiliser une plist est judicieux.
Pour essayer de le représenter :
tableau -> elem0 [dict] -> title [string]
elem1 [dict] sequences [tab] -> elem0 [dict] -> etc...
elem2 [dict] items [tab] elem1 [dict]
Je crois pas être clair mais voilà un exemple de ma représentation des données et ça continue sur 10 niveaux à peu près voire plus suivant mes besoins. Donc, j'ai mon modèle qui se charge de construire/charger un gros dictionnaire, les controlleurs se chargent eux de transmettre une partie de ce dictionnaire.
J'ai entendu sur une vidéo de cours de stanford que les plist n'était plus conseillées dès qu'elles dépassaient une certaine taille (une centaine de ko), bon avec mon anglais, j'ai pas vraiment tout saisi.
De manière plus général, comment représentez-vous vos données ? codés en dur (ouch), xml/plist, base de données, autres ? (Avantages et inconvénients ?)
Have fun !
Je ne savais pas trop où poster donc je tente ma chance ici. J'aurais une question d'ordre général à vous soumettre.
J'utilise actuellement sur le projet sur lequel j'ai décidé d'utiliser une plist (système de dictionnaire/tableau). Plus je code, plus la représentation des données devient complexe. Donc je me demande si le choix d'utiliser une plist est judicieux.
Pour essayer de le représenter :
tableau -> elem0 [dict] -> title [string]
elem1 [dict] sequences [tab] -> elem0 [dict] -> etc...
elem2 [dict] items [tab] elem1 [dict]
Je crois pas être clair mais voilà un exemple de ma représentation des données et ça continue sur 10 niveaux à peu près voire plus suivant mes besoins. Donc, j'ai mon modèle qui se charge de construire/charger un gros dictionnaire, les controlleurs se chargent eux de transmettre une partie de ce dictionnaire.
J'ai entendu sur une vidéo de cours de stanford que les plist n'était plus conseillées dès qu'elles dépassaient une certaine taille (une centaine de ko), bon avec mon anglais, j'ai pas vraiment tout saisi.
De manière plus général, comment représentez-vous vos données ? codés en dur (ouch), xml/plist, base de données, autres ? (Avantages et inconvénients ?)
Have fun !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
• iPhone SDK3 fournit également SQLite, efficace pour le stockage et la recherche (en local) si la quantité de données est importante.
• L'archivage/désarchivage des données actuellement traitées avec des méthodes comme encodeWithCoder: ou decodeWithCoder: plus pertinentes pour une application qui échange des informations avec l'utilisateur. De plus cela permet d'archiver tout type de données, des images, des couleurs, ... y compris des objets non standards déclarés par ton programme.
• Les fichiers traditionnels : on peut stocker, ouvrir, transformer dans des fichiers du SandBox avec les méthodes classiques du C.
• XML avec NSXMLParser.
• Coredata qui est une version automatisée pour la persistence des documents, soit pour des applications ultra-simples, soit pour des programmeurs aguerris dans les cas plus compliqués.
Le elem0 qui apparaà®t deux fois dans ton schéma, c'est le même objet ?
Non les elem0 ne sont pas nécessairement les mêmes objets.
J'ai justement utilisé les plist car simple à remplir depuis xcode, ça m'a permis d'avancer rapidement dans mon code. L'image des données que je manipule est la même que celle de la plist. J'ai à la base mis en place le pattern builder pour créer mes données (dictionnaire) à partir de plist (un simple chargement), base de données, xml, etc...
Ma question pourrait être vu autrement comme :
1/ Vaut-il mieux se trimballer un gros dictionnaire (qui se réduira au fur et à mesure que l'on avance dans les vues). En gros je suis dans la vue1 qui a chargé le dico en entier, en cliquant un bouton pour aller sur la vue2, je ne lui transmet qu'une partie du dico, ainsi de suite.
2/ Ou vaut-il mieux dans la vue1 charger le minimum nécessaire, puis en cliquant sur un lien pour aller sur la vue2, le chargement de de cette dernière va aller chercher les données nécessaire à son fonctionnement dans une base de données ou autre ?
Quand j'y avais réfléchi, le fait d'avoir une représentation des données fixe me permettait d'implémenter mon code indépendamment de la source de données (le cas 1/). A priori mes sources seraient du xml, j'aurais alors à implémenter plus tard un parser de xml qui va construire mon dico.
La solution 2/ a l'air plus optimisée, j'ai pas fait de test mais j'avais noté un petit temps de chargement des fois pour passer d'une vue à l'autre (sachant que j'ai implémenté le 1/ pour l'instant) mais ça je pense que ça peut s'améliorer.
Tu charges les données une fois pour toutes. En passant de la vue 1 à la vue 2, tu ne charges plus rien : tu transmets simplement au view controller n°2 un pointeur vers la partie du Model qui l'intéresse.
et le code du test
Mais que se passerait-il dans le cas où les données à charger en une fois serait vraiment importante. Ou plutôt avec cette manière de faire, à partir de quelle moment verrait-on une baisse des performances ?
Edit: Merci pour le test de l'encombrement.
Quand à la mesure exacte, il faudrait faire/trouver des évaluations ...
"Well, as far as I can tell, Apple has santioned off about 24MB of main memory for us developers out of its total physical memory."
Effectivement, j'ai fait apparaà®tre dans une de mes applications des pics de 20 Mo, avec un temps d'attente associé, sans buz. Cependant, on voit également des posts qui s'étonnent de Memory Warning aux alentours de 4 Mo ...
Avant le 3GS on avait en gros 40Mo de RAM de dispo en enlevant aux 128Mo la RAM prise par le système, les daemons Apple, et les applis intégrées. Maintenant on a de l'ordre de 156Mo avec le 3GS de dispo pour "nos apps"...
Ce qui se confirme en observant le fichier lui-même, le facteur 3 venant essentiellement des balises.
Un fichier XML classique ne doit pas être plus économique.
Ali, ça veut dire dire que certaines applis qui tournent bien sous 3GS rameront/planteront sur 3G c'est ça ?
Ca c'est en gros ce que fait le premier elem0 de mon petit schéma en haut. Sachant que mon tableau contient 5 éléments, on va dire qu'en tout ça doit faire 500ko mais dans l'absolu le tableau contient un nombre arbitraire d'éléments. J'envisage de faire un plist par élément et ne charger que par bloc de 100ko quand nécessaire.
Pour les tests de performances, tu utilises quoi ? Instruments ?