[Zombies] En fait c'est quoi en clair ? et ça sert a quoi ?

GercofisGercofis Membre
23:38 modifié dans API AppKit #1
[Zombies]
En fait c'est quoi en clair ?
ça sert a quoi ?
Est-ce vraiment utile ? Si oui a utiliser dans quel cas par exemple ?
Merci...

Réponses

  • Philippe49Philippe49 Membre
    23:38 modifié #2
    last-night-an-iphone-zombie-nszombieenabled-saved-my-life

    With NSZombieEnabled you can compile your application so that it technically never frees any memory (ensure you remove this before distribution, obviously). Each time a dealloc message is sent to an object it's Class is dynamically changed to _NSZombie and by default the allocated memory is never marked as free. This is useful because now when the erroneous message is sent to the already (incorrectly) dealloced object the debugger can report something sensible to the console. If you run this code inside the debugger, your application will stop when the EXC_BAD_ACCESS occurs and with a backtrace you can easily find the line of code which caused it.

    Cool eh!

    To enable it (in xcode)
    1. Double-click an executable in the Executables group of your Xcode project.
    2. Click the Arguments tab.
    3. In the “Variables to be set in the environment:” section, make a variable called “NSZombieEnabled” and set its value to “YES”.

    So, if you're scratching your head with an EXC_BAD_ACCESS error hopefully you'll find this helpful.


  • CéroceCéroce Membre, Modérateur
    23:38 modifié #3
    C'était ça la question ?
  • GercofisGercofis Membre
    23:38 modifié #4
    Pour résumer c'est l'instance désallouée d'une classe qui donc reste en mémoire.
    ça sert a débuguer, je suppose qu'on peut appeler une méthode même si la classe est normalement désallouée ?

    Par contre un exemple simple de cas d'utilisation ?
  • CéroceCéroce Membre, Modérateur
    23:38 modifié #5
    Si tu essaies d'envoyer un message à  cette instance désallouée, NSZombie t'affiche un message du genre
    NSZombie: Attempt to send message -setNeedsDisplay: to deallocated NSView object 0x56af80
    


    En gros, ça te permet de voir que tu as envoyé un [release] trop tôt, ou d'autres choses du genre. C'est vraiment très utile, tu verras.
Connectez-vous ou Inscrivez-vous pour répondre.