Donc je pensais avoir répondu à toutes ces questions. Puis, tout d'un coup, j'ai une erreur (un crash) que je n'arrive pas à comprendre. Après avoir effectué des recherches pour remédier au problème, je me rends compte que tout ce que je pensais savoir sur ces domaines critiques était faux.
Voici 8 questions que je vais lancer dans l'espoir que quelqu'un y réponde - les réponses à ces questions m'aideront grandement à remettre ma compréhension sur les rails. Merci d'avance !
Q1) Est-il possible d'appeler Release sur un objet si cette référence est nulle ? Cela devrait être inoffensif, non ?
Q2) Est-il possible d'appeler Release sur un objet si la référence a été libérée et que le nombre de références est de 0 ?
Q3) Est-il nécessaire de mettre une référence à zéro APRÈS l'avoir libérée ? Que se passe-t-il si on ne lui donne pas la valeur nil ?
Q4) Y a-t-il vraiment une différence entre nil et NULL, ou est-ce juste une question de sémantique pour aider le lecteur/développeur à connaître le type d'objet juste en le regardant ?
Q5) L'utilisation des propriétés nécessite-t-elle l'utilisation du pointeur "Self" ?
Q6) L'utilisation de variables d'instance nécessite que le pointeur 'Self' ne soit PAS utilisé ?
Q7) Quand voudrais-je utiliser une variable d'instance au lieu de sa propriété ? J'imagine que les membres de données de type valeur sont acceptables puisqu'il n'y a pas de libération et de conservation en jeu.
Q8) Est-il nécessaire d'appeler la fonction dealloc d'un objet à partir de la fonction dealloc ? Dans de nombreux exemples, j'ai vu la fonction Release être appelée, mais pas la fonction Dealloc - de tels tutoriels sont-ils incorrects ?