tester l'allocation avant de faire un release

RocouRocou Membre
17:52 modifié dans API AppKit #1
Bonjour,

Pourquoi personne ne teste si un objet est alloué avant de faire un release?
Peut-on le faire? Si oui, comment?
Cela éviterait bien des crashes  :(

Réponses

  • GreensourceGreensource Membre
    17:52 modifié #2
    Le souci c'est que si tu fait un release sur un objet avec un retain count <0 c'est que tu as un problème dans ta gestion mémoire. ça signifie que tu pensais être responsable de cet objet alors que non. Ou bien qu'un autre objet le pensais et a fait un release.

    Donc vérifié le retain count par exemple, avant de faire un release risquerais de masquer ce genre de souci.

    De plus, avec les autorelease tu ne peux pas te baser sur cette technique. En gros il faut faire attention et bien concevoir son application, mais dans un sens c'est pas une si mauvaise chose, ça force à  faire attention à  sa conception et a ne pas coder à  l'arrache.
  • RocouRocou Membre
    17:52 modifié #3
    dans 1279207830:

    Le souci c'est que si tu fait un release sur un objet avec un retain count <0 c'est que tu as un problème dans ta gestion mémoire. ça signifie que tu pensais être responsable de cet objet alors que non. Ou bien qu'un autre objet le pensais et a fait un release.

    Donc vérifié le retain count par exemple, avant de faire un release risquerais de masquer ce genre de souci.

    De plus, avec les autorelease tu ne peux pas te baser sur cette technique. En gros il faut faire attention et bien concevoir son application, mais dans un sens c'est pas une si mauvaise chose, ça force à  faire attention à  sa conception et a ne pas coder à  l'arrache.

    Merci pour ta réponse.
    La gestion de la mémoire est décidément bien complexe  B)
    Vivement le Garbage Collector imposé par Apple  :P
  • DrakenDraken Membre
    17:52 modifié #4
    Euh, on est bien dans la section MacOS SDK ici, non ? Dans ce cas, pourquoi ne pas utiliser le Garbage Collector de MacOS ?

  • zoczoc Membre
    juillet 2010 modifié #5
    dans 1279208559:

    Vivement le Garbage Collector imposé par Apple  :P

    Le jour ou ça arrive, je jette mes macs et j'achète un PC avec linux dessus...


    Un ramasseur de miettes ne remplacera jamais un cerveau humain pour une gestion optimale de la mémoire. Et non, la gestion de la mémoire n'est pas complexe. Par contre c'est sûr que si on ne prend pas le temps de se documenter et d'apprendre, ça peut faire peur. Gérer la mémoire, ça nécessite juste de la discipline, et la discipline c'est bien  :P



  • yoannyoann Membre
    17:52 modifié #6
    La vérification d'un pointeur est inutile en ObjC sous condition de respecter une règle des plus simple, placer les pointeurs à  nil !

    Lorsque vous faites un release de vos objets, la ligne suivante doit être la mise à  nil du pointeur en question, ainsi si par la suite vous vous retrouvez sur un cas loufoque où vous envoyez un release sur un objet qui n'existe pas (property non alloué par exemple), le message release est envoyé à  nil et ne plante pas (spec du runtime, l'envois de message à  nil ne fait pas planter).

    C'est aussi simple que ça, inutile de tester puisque si on pense a mettre ses pointeurs à  nil on plante pas :-)
  • MalaMala Membre, Modérateur
    17:52 modifié #7
    dans 1279228191:

    C'est aussi simple que ça, inutile de tester puisque si on pense a mettre ses pointeurs à  nil on plante pas :-)

    Je plusois Yoann! :P

    C'est tellement plus simple de pas faire compliqué...  :p :p :p
  • RocouRocou Membre
    17:52 modifié #8
    dans 1279214464:

    Euh, on est bien dans la section MacOS SDK ici, non ? Dans ce cas, pourquoi ne pas utiliser le Garbage Collector de MacOS ?

    Parce que j'utilise un FrameWork qui ne l'utilise pas  :'(

    Merci à  Yoann pour son judicieux conseil.
  • DrakenDraken Membre
    17:52 modifié #9
    Alala, on n'ai pas aidé par la technique !  :(
Connectez-vous ou Inscrivez-vous pour répondre.