Doit on toujours utiliser retain pour le paramètre d'une methode ?
zenx
Membre
Bonjour !
Ma question est certainement mal formuler. En fait, je fais reférence à un exemple de code que j'ai vu. Celui-ci ressemblait vaguement à cela :
- (NSDate *)setEntryDate:(NSMutableArray *)date {
[date retain]
...
}
Pourquoi a-ton besoin d'incrémenter date ?. Faut il le faire pour chaque argument de chaque methode lorsque l'argument est de type objet ?
Merci.
Ma question est certainement mal formuler. En fait, je fais reférence à un exemple de code que j'ai vu. Celui-ci ressemblait vaguement à cela :
- (NSDate *)setEntryDate:(NSMutableArray *)date {
[date retain]
...
}
Pourquoi a-ton besoin d'incrémenter date ?. Faut il le faire pour chaque argument de chaque methode lorsque l'argument est de type objet ?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Dans le cas contraire, le code marchera mais on va tout droit vers une fuite mémoire à mon avis.
C'est même à se demander pourquoi cette ligne est présente dans le code. Elle a sûrement une bonne raison, mais cette dernière n'est sûrement pas "parce qu'il faut le faire à chaque fois"
Tu n'as pas à faire de "retain" sur les arguments de tes méthodes, sauf si tu as besoin de cet argument une fois sorti de ta méthode, parce que tu auras stoqué cet argument dans une variable d'instance NSDate* de ta classe par exemple, et donc pour éviter de le perdre lorsque tu sortiras de ta fonction.
En effet imagine ce genre de cas (MaClasse est une classe perso qui contient une variable d'instance "NSDate* _laDate", pour l'exemple)
Mais que si tu stoques la valeur de ton paramètre dans un tableau (NSArray), la méthode "setValue:forKey:" de la classe NSArray fait toute seule le retain nécessaire.
Enfin donc c'est uniquement quand tu fais un "maVariableDInstance = monParametre" que tu dois faire un retain dessus pour déclarer "attention je référence mon objet à un endroit supplémentaire", donc quand tu feras un "release" pour déclarer "il y a une variable de moins qui pointe sur cet objet", tu équilibreras les comptes.
Le sujet de la gestion de la mémoire était assez particulier en Objective-C (pas forcément simple à comprendre de prime abord, mais dès qu'on a eu le déclic c'est bon), je te conseille vivement de lire les articles traitant de la gestion de la mémoire avant de poursuivre