Quelle est la différence entre “copier” et “conserver”?
Quelle est la différence entre copy
et retain
pour NSString
?
- (void)setString:(NSString*)newString
{
string = [newString copy];
}
Vous devez vous connecter pour publier un commentaire.
Dans un cadre général, la conservation d'un objet augmentera sa conserver le compteur d'une unité. Cela aidera à garder l'objet dans la mémoire et l'empêcher d'être emportée par le vent. Ce que cela signifie est que si vous ne tenez un conservé version de celui-ci, vous partager cette copie avec qui il passa à vous.
Copie d'un objet, cependant vous le faites, devraient créer un autre objet avec double valeurs. Pensez à cela comme un clone. Vous ne partagez PAS le clone avec qui il passa à vous.
Lorsque vous traitez avec
NSString
s en particulier, vous ne pouvez pas être en mesure de supposer que celui qui est en vous donnant unNSString
est vraiment en vous donnant unNSString
. Quelqu'un pourrait-être de vous remettre une sous-classe (NSMutableString
, dans ce cas), ce qui signifie qu'ils pourraient éventuellement modifier les valeurs sous les couvertures. Si votre application dépend de la valeur passée dans, et quelqu'un change sur vous, vous pouvez exécuter des ennuis.copy
est équivalent àretain
pour la plupart de laFoundation
classes qui ne sont pas mutables.De retenue et de copie sont deux choses différentes, la première
du point de vue conceptuel en appel par référence, tandis que la seconde est en appel par valeur.
conserver : Elle se fait sur l'objet créé, et il est tout simplement augmenter le nombre de références.
copie -- Il crée un nouvel objet et quand un nouvel objet est créé conserver le comte sera 1.
Espérons que Cette Aide pour U...:)
Son un vieux post, mais voici mon point de vue sur la question
Conserver augmente le conserver compter d'un objet par 1 et prend possession d'un objet.
Considérant que copie copie les données présentes dans la mémoire de l'emplacement et de l'affecter à la variable dans le cas de copie de la première copie des données à partir d'un lieu de l'affecter à la variable qui augmente le conserver comte.
Rappelez-vous juste qui conservent des œuvres de référence et de copier des œuvres sur la valeur
copy
crée un nouvel objet ?? ,si vous utilisez conserver, il copie la valeur du pointeur de celle d'origine.conserver également incrémenter le compteur de référence par un.
mais en cas de copie, une reproduction de données référencée par le pointeur et l'affecter à la copie de la variable d'instance.
La plus grande différence est que si vous utilisez
copy
, l'objet de la copie doit mettre en œuvre lesNSCopying
protocole (très facile à faire). Pas chaque objet implémente que, si vous avez besoin d'utiliser des soins que vous savez quel type vous serez d'exploitation contre (ou pour vérifier l'appui de ce protocole) lorsque vous essayez d'appelercopy
.La meilleure règle à l'aide de
copy
que je pense, est de toujours définir NSString propriétés de "copie" au lieu de la conserver. De cette façon, vous obtenez des lectures plus précises à partir de la fuite de l'instrument si vous vous trompez et oublier de libérer une chaîne de caractères d'un objet s'accroche. D'autres usages de la copie doivent être plus réfléchis.copier: crée une nouvelle instance d'une copie du récepteur. Cela signifie que vous pourrez avoir 2 différents
à retenir: Augmente le
retainCount
du récepteur. Un objet est supprimé de la mémoire - (avec dealloc), lorsque retainCount est de 0.La conservation d'un objet signifie le conserver compter augmente de un. Cela signifie que l'instance de l'objet sera conservé en mémoire jusqu'à ce qu'elle conserver compteur tombe à zéro. La propriété va stocker une référence à la présente instance et partagent le même exemple avec quelqu'un d'autre qui l'a conservé aussi. Copie signifie que l'objet sera cloné avec des valeurs en double. Il n'est pas partagé avec quelqu'un d'autre.
conserver attribut est spécifié, tel qu'il peut conserver la une autre mémoire je.e il peut être fait pour pointer vers une autre adresse aussi
une copie de copies l'adresse, puis le retient.