Je suis nouveau à l'Objectif C. J'ai des connaissances de base en C, y compris le concept de pointeurs. J'ai deux questions de base:
Réponse mise à jour pour la documentation modifiée
Les informations sont maintenant réparties dans plusieurs guides de la documentation. Voici une liste de lectures obligatoires:
La réponse à cette question dépend désormais entièrement de savoir si vous utilisez une application gérée par ARC (la valeur par défaut moderne pour les nouveaux projets) ou si vous forcez la gestion manuelle de la mémoire.
Assign vs. Weak - Utilisez assignez pour définir le pointeur d'une propriété sur le adresse de l'objet sans le conserver ou le curer d'une autre manière; utilisez faible pour que la propriété pointe automatiquement sur nil si l'objet qui lui est affecté est désalloué. Dans la plupart des cas, vous voudrez utiliser faible pour ne pas accéder à un objet désalloué (accès illégal d'une adresse mémoire - "EXC_BAD_ACCESS
") Si vous n'effectuez pas un nettoyage approprié.
Conserver ou copier - Les propriétés déclarées utilisent conservent par défaut peut simplement l'omettre complètement) et gérera automatiquement le nombre de références de l'objet, qu'un autre objet soit affecté à la propriété ou qu'il soit défini sur nil; Utilisez copy pour envoyer automatiquement à l'objet nouvellement affecté un message -copy
(Qui créera une copie de l'objet transmis et affectera cette copie). à la propriété à la place - utile (même requis) dans certaines situations où l'objet assigné peut être modifié après avoir été défini en tant que propriété d'un autre objet (ce qui signifierait que la modification/mutation s'appliquerait également à la propriété).
Le Guide de programmation de la gestion de la mémoire de la bibliothèque de référence iOS contient les bases de l'affectation, de la copie et de la conservation, avec des analogies et des exemples.
copy Crée une copie d'un objet et le renvoie avec un nombre de conservations égal à 1. Si vous copiez un objet, vous êtes propriétaire de la copie. Ceci s'applique à toute méthode contenant la copie Word où "copie" fait référence à l'objet renvoyé.
Retenir Augmente le nombre de retenues d'un objet de 1. Acquiert la propriété d'un objet.
release Réduit le nombre de retenues d'un objet de 1. Renonce à la propriété d'un objet.
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"First",@"Second", nil];
NSMutableArray *copiedArray = [array mutableCopy];
NSMutableArray *retainedArray = [array retain];
[retainedArray addObject:@"Retained Third"];
[copiedArray addObject:@"Copied Third"];
NSLog(@"array = %@",array);
NSLog(@"Retained Array = %@",retainedArray);
NSLog(@"Copied Array = %@",copiedArray);
array = (
First,
Second,
"Retained Third"
)
Retained Array = (
First,
Second,
"Retained Third"
)
Copied Array = (
First,
Second,
"Copied Third"
)
attribuer
copie:
conserver: