J'ai vu des suggestions indiquant de définir NSZombieEnabled
sur true
lors du débogage. Qu'est-ce que NSZombie? Est-ce un cadre? Un paramètre?
ios
iphone
objective-c
nszombie
Moshe
la source
la source
Réponses:
C'est une aide au débogage de la mémoire. Plus précisément, lorsque vous définissez le paramètre,
NSZombieEnabled
chaque fois qu'un objet atteint le compte de conservation 0, au lieu d'être désalloué, il se transforme en uneNSZombie
instance. Chaque fois qu'un tel zombie reçoit un message, il enregistre un avertissement plutôt que de planter ou de se comporter de manière imprévisible. En tant que tel, vous pouvez déboguer de subtils problèmes de sur-libération / libération automatique sans outils avancés ni aiguille minutieuse dans les recherches de meules de foin.Le nom est un jeu assez évident sur le fait que les objets sont normalement considérés comme «morts» lorsqu'ils atteignent le compte de conservation 0. Avec ce paramètre, ils continuent d'exister dans une étrange demi-vie - ni vivants, ni tout à fait morts. Un peu comme de vrais zombies, sauf qu'ils mangent moins de cerveaux.
la source
Adam a fait un excellent travail en expliquant ce que sont les zombies, mais l'utilisation de la variable d'environnement n'est pas le meilleur moyen de les trouver et de les suivre.
Une bien meilleure approche de la détection des zombies consiste simplement à utiliser des instruments - à partir de XCode, commencez par "Exécuter avec l'instrument" et choisissez "Allocations".
Arrêtez ensuite l'enregistrement juste après son démarrage, appuyez sur le bouton «i» de l'instrument Allocations et activez «Activer les comptages de références» et «Activer la détection NSZombie». Maintenant, appuyez à nouveau sur Enregistrer dans l'instrument, et votre application démarrera - si des objets zombies sont envoyés, l'enregistrement des messages s'arrêtera et une boîte de dialogue apparaîtra dans la chronologie d'enregistrement - vous pouvez cliquer dessus pour trouver chaque endroit où un objet était conservés ou libérés.
Edit: Le conseil précédent concernait XCode 3, voici un ajout pour XCode 4:
Dans XCode 4.2 , il existe un mécanisme encore plus simple pour utiliser la détection de zombies - l'instrument Zombie. Au lieu de "Exécuter" pour démarrer l'application, utilisez "Profil" et un sélecteur d'instrument apparaîtra. Sélectionnez "Zombie", et l'application commencera à fonctionner - faites ce qui cause votre plantage, une boîte de dialogue apparaîtra disant "Zombie Messaged".
De là, cliquez sur la petite flèche dans la boîte de dialogue. Cela donnera une liste de toutes les fois où l'objet zombie a été créé, conservé ou publié. Tirez la barre latérale vers le haut et vous pouvez accéder à chaque entrée, en regardant la trace de pile pour le code qui était responsable de chaque ajustement dans le compte de rétention.
la source
Je suis d'accord avec ce que Kendall a ajouté, c'est très utile, mais je suggère de toujours faire la variable d'environnement pour ne pas oublier qu'elle est activée. Semblable au lien (maintenant expiré) de Cocoa Dev, j'ai mis ceci pour ne pas le manquer:
Cela attire très bien mon attention.
la source
Aiderait quelqu'un.
Document détaillé sur les instruments. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1
la source