J'ai donc installé mon application sur mon ipad et elle se bloque en raison d'un problème de mémoire. Je me suis dit que c'était parce que j'utilisais de très gros fichiers d'images, alors je suis revenu et j'ai réduit tous ces fichiers et en ai pratiquement coupé environ 75% en les redimensionnant puis en utilisant PNGCrush. Maintenant, en ce qui concerne l'exécution du programme, si j'ai une image d'arrière-plan pour chacun de mes 4 onglets individuels, cela économiserait-il de la mémoire si je devais régler les images sur Null chaque fois que je changerais d'onglet ou devrais-je les laisser? ? J'ai une page qui contient quelques douzaines d'images car elles agissent comme des boutons et d'après ce que j'entends, il me semble que je devrais tout effacer quand je ne regarde pas cette page. Est-ce exact?Image Question pour iPad - Problèmes de mémoire
Maintenant, quand je démarre, je charge toutes les images pour tout dans l'application dans une sorte de: "charger maintenant et être fait avec" mentalité, mais de ce que j'ai lu qui provoque la mémoire problèmes car il n'y a pas beaucoup de mémoire à utiliser. Cela signifie-t-il que chaque fois que je change d'onglets ou de vues, je veux effacer toutes les images de celles qui ne sont pas visibles et les recharger quand on y retourne? Cela entraînerait-il une augmentation des performances? Ou au moins prévenir les accidents? Mon programme fonctionne dans le simulateur mais quand je le lance sur mon ipad il explose juste =/
Merci!
EDIT: J'utilise MonoTouch BTW donc tout est en C#
UIImage BG = UIImage.FromFile("Images/Makes/explosion.png");
UIImage basic = UIImage.FromFile("Images/Models/camaro.png");
UIImage advance = UIImage.FromFile("Images/search.png");
AdvancedSearchButton.SetBackgroundImage(advance, UIControlState.Normal);
ImageSearchButton.SetBackgroundImage(basic, UIControlState.Normal);
MainBG.Image = BG;
BG.Dispose();
basic.Dispose();
advance.Dispose();
Maintenant, je sais en mémoire régulière C# dispose()
ne fait pas « libre », mais je lis quelque chose qui dit qu'il est converti à "release"
quand il compile à obj-c de sorte que serait essentiellement libérer ces objets.
Aussi, je me demande si je devrais dispose()
des boutons individuels et l'image après que je ne les regarde plus. Je mettais juste l'image à NULL mais cela m'a donné des erreurs.
MainBG.Dispose();
AdvancedSearchButton.Dispose();
ImageSearchButton.Dispose();
Merci beaucoup pour l'aide!
EDIT2:
Je viens d'essayer le code ci-dessus et les images de fond et tout le reste sont toujours là et apparaît comme si rien est réellement obtenir effacé. Suggestions?
"Donc, une fois que quelque chose est chargé dans la mémoire, il reste dans la mémoire jusqu'à ce que votre code le libère explicitement" Est-ce que cela signifie que si je définis un arrière-plan dans l'onglet 1, je veux le "libérer" en le définissant à Null? Est-ce que ce travail est ou là quelque chose d'autre que je devrais faire. Je comprends les concepts de libérer/libérer de la mémoire, je ne suis pas au courant de la façon de le faire dans ce cas. La majorité de mon application est juste des boutons avec des images en eux. – Adam
Vous devez envoyer un message 'release' à l'objet backing' NSImage' avant de définir le pointeur sur NULL. –
Donc, essentiellement, je voudrais charger mon NSImage à partir de mon fichier, définissez mon image à cela, puis relâchez l'image NS? Et quand je passerais de cette tabulation à une autre, je mettrais cette image à zéro. Je rincerais alors et répéterai si je suis revenu à cet onglet. Correct? – Adam