J'aimerais bien tester les fonctions de mon application dans des conditions de mémoire faible, mais c'est difficile à tester. Comment puis-je induire des avertissements de mémoire faible qui déclenchent la méthode didReceiveMemoryWarning dans mes vues lorsque l'application s'exécute sur l'appareil, pas sur le simulateur? Ou de quelle manière puis-je tester mon application dans ces conditions possibles?
La raison pour laquelle je ne peux pas utiliser le simulateur est que mon application utilise Game Center et que les invitations ne fonctionnent pas sur le simulateur.
Pour tester sur un appareil, ajoutez simplement du code qui alloue périodiquement de gros morceaux de mémoire sans le libérer (c'est-à-dire une fuite exprès). Vous pouvez le faire dans un thread séparé, ou en réponse à une minuterie, ou en utilisant le mécanisme qui vous permet le mieux de tester et d'observer le comportement de votre application.
Vous pouvez également choisir de créer une application distincte qui fait quelque chose de similaire et est conçue pour fonctionner en arrière-plan, si vous souhaitez facilement la réutiliser et/ou tester avec plusieurs applications.
Vous pouvez appeler la méthode privée:
[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)];
N'oubliez pas de l'utiliser uniquement sur le débogage, sinon votre application sera rejetée.
L'élément de menu Simulate Memory Warning
Du simulateur iOS vous permet de simuler un avertissement de mémoire.
À l'aide des instruments, utilisez l'élément de menu: Instrument -> Simuler l'avertissement de la mémoire.
Pour utiliser Instruments sur votre application à partir de Xcode, utilisez l'élément de menu Produit -> Profil.
J'ai réécrit réponse d'Enzo Tran dans Swift:
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
@ChikabuZ converti en Swift 3:
UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil)
Il y a une commande de menu qui l'invoquera.
Hardware > Simulate Memory Warning
depuis le simulateur.
Si quelqu'un, pour une raison quelconque, essaie de le faire dans Swift 4 - voici comment allouer 1,2 Go de RAM.
let d = Data.init(repeating: 100, count: 1200000000)
Si quelqu'un, pour une raison quelconque, essaie de le faire dans Swift 3 - voici comment allouer 1,2 Go de RAM.
for i in 0...1200 {
var p: [UnsafeMutableRawPointer] = []
var allocatedMB = 0
p.append(malloc(1048576))
memset(p[allocatedMB], 0, 1048576);
allocatedMB += 1;
}
Swift 4:
UIApplication.shared.perform (Selector (("_ performMemoryWarning"))))
Peut exécuter ce qui précède en réponse à un événement/notification.