Je cherche un équivalent à la méthode -(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
qui est disponible sur l'iPhone. Jusqu'à présent, je n'ai rien trouvé, mais j'aimerais vérifier avant de commencer à écrire le mien.Y at-il un équivalent de -applicationDidReceiveMemoryWarning: sur le Mac
Répondre
La mémoire sous Mac OS X ne fonctionne pas de la même manière que sur OS X Touch. Notamment, une machine de bureau a beaucoup plus de RAM et va échanger de la mémoire sur le disque que les applications exigent plus. De plus, de nombreuses applications sont en concurrence pour les ressources.
La vraie question est qu'essayez-vous d'accomplir?
Si la réponse est mémoire utiliser efficacement, alors vous devez vous concentrer sur les allocations réduisant au minimum, vous assurant d'avoir aucune fuite, et veiller à ce que vos structures de données sont optimisées. Utilisez ObjectAlloc dans Instruments pour analyser l'utilisation de la mémoire et déterminer où se concentrer.
Cependant, si la réponse est plus le long des lignes de que j'ai un sous-système de mise en cache qui bénéficie de beaucoup de mémoire, mais je veux donner au système alors que d'autres applications augmentent leurs demandes, alors vous vouloir étudier le support Snow Leopard's Caching and Purgeable Memory. Notamment, les deux API fournissent un moyen de mettre en cache de manière agressive des données tant qu'elles sont des ressources du système, en reculant ou en redonnant au système lorsque leur pression est la mémoire.
Je pense que vous pouvez raisonnablement vous attendre à ce que la plupart des Mac modernes aient au moins 1 Go de RAM (probablement 2, et peut-être même 4+). Si votre application provoque des erreurs malloc et/ou manque de mémoire, alors vous avez mal fait et vous devez repenser ce que vous stockez en mémoire.
Donc, en un mot, non il n'y en a pas. Le Mac n'est pas aussi limité en mémoire que l'iPhone, donc il n'en a pas besoin.
Vous supposez que la mémoire vive de 1 Go du Mac est disponible. Si d'autres applications utilisent 99% de RAM, votre application ne dispose que de 1% de RAM disponible pour son propre usage. Vous pourriez dire qu'il y a moins besoin de la fonctionnalité sur un Mac, mais ce n'est pas la même chose que pas besoin. –
@jeremy La mémoire sur les systèmes de bureau ne fonctionne pas vraiment de cette façon. @Dave En fait, il y a un besoin considérable de gérer efficacement la mémoire et il n'est pas rare qu'une application ajuste l'utilisation de la mémoire aux capacités du système pour obtenir des performances maximales.Heureusement, il existe une API pour cela (dans Snow Leopard). – bbum
Laissez le noyau s'inquiéter de la gestion de la mémoire.
L'iPhone n'utilise pas de mémoire virtuelle, donc ses contraintes de mémoire sont très concrètes. La seule option dont dispose le noyau est de vous avertir avant qu'il ne se termine par vous. C'est pourquoi l'iPhone a des avertissements de mémoire. Le noyau du bureau a beaucoup plus d'options disponibles pour faire face à des conditions de faible mémoire, il est donc préférable de le laisser faire son travail. Il ne sert à rien de lancer agressivement la libération de la mémoire qui a déjà été échangée sur le disque.
Il n'y a pas d'équivalent direct, autant que je sache. Vous pourriez probablement vérifier si les allocations d'objets échouaient, puis envoyer une notification pour permettre à d'autres parties de votre application de les écouter.
En pratique, la plupart des applications ne dérangent pas. Dans les situations où vous commencez réellement à ne pas allouer d'objets (mémoire virtuelle épuisée, disque de démarrage complètement plein, etc.), vous vous dirigez probablement vers un crash de toute façon.
- 1. Meilleure approche pour déboguer applicationDidReceiveMemoryWarning sur iPhone?
- 2. Y at-il un équivalent pthread WatiForMultipleObjects
- 3. setLeftCapWidth sur le mac?
- 4. Y at-il un équivalent de java @SuppressWarnings dans JSP?
- 5. Extension PHP sur un Mac
- 6. Windows équivalent cygwin de Mac OS X commande ouverte
- 7. Mac Terminal.app bug ennuyeux - Comment y remédier?
- 8. Y at-il un équivalent Microsoft SQL Profiler pour Oracle?
- 9. Conversion à Mono sur un Mac
- 10. Y at-il un équivalent à .Net FileSystemWatcher dans le monde Linux?
- 11. API d'entrée audio simple sur un Mac?
- 12. Deux exécutables dans un paquet sur MAC
- 13. Red Gate Profiler équivalent pour Objective-C Mac/iPhone
- 14. DataGridView.GetClipboardContent() équivalent sur DataGrid
- 15. windows équivalent de .netrc sur unix?
- 16. enregistrer un protocole sur mac osx?
- 17. OSX équivalent de ShellExecute?
- 18. Deux licences de développement iPhone sur un Mac?
- 19. Y a-t-il un équivalent de `date_default_timezone_set()` de PHP qui fonctionne dans MySQL?
- 20. Obtenir des données en direct de l'iPhone sur le Mac
- 21. Erreur de téléchargement de fichier sur le navigateur mac et non sur le navigateur du PC
- 22. Y a-t-il un équivalent à ContextLoader du ressort pour un non-webapp?
- 23. Impression sur une imprimante USB avec Python sur un Mac
- 24. SWT: Impossible de redimensionner les boutons sur un Mac
- 25. Lecture de la sortie syslog sur un Mac
- 26. Application de type Citrix Server - sur un Mac?
- 27. Pilote PDO MySQL sur Mac
- 28. Y a-t-il une version mod_top pour Windows? sinon, y a-t-il un outil équivalent?
- 29. Quel est le truc pour utiliser otool sur le mac?
- 30. Linux shell équivalent sur IIS
Merci Bill. J'essaie en effet de créer un cache de données .. images dans ce cas, que le système peut récupérer s'il en a besoin. Le protocole NSDiscardableContent ressemble exactement à ce que je recherche. Génial à voir construit dans le système. Yay pour Snow Leopard! –
Jetez aussi un coup d'œil à NSCache ... – bbum