La compréhension de référence faible
J'ai l'ARC suivant activée code
@property (nonatomic, weak) NSArray *a;
- (void)viewDidLoad
{
[super viewDidLoad];
self.a = @[@1, @2];
NSLog(@"ab is %@", self.a); //prints details of array
//Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
for (id element in self.a) { //empty here
NSLog(@"blah");
}
//Dispose of any resources that can be recreated.
}
C'est le seul endroit où j'ai utilisé le self.a
. C'est un programme de test que j'ai écrit pour déboguer un de mes questions.
Quand je simule avertissement de mémoire self.a
disparaît? Pourquoi?
OriginalL'auteur Sandeep | 2013-03-28
Vous devez vous connecter pour publier un commentaire.
Pour comprendre cela, il faut comprendre le nombre de références. En Objective-C, chaque objet a un compteur de référence (à savoir le nombre de références fortes à l'objet). Si il n'y a pas de solides références, le nombre de références est
0
et l'objet sera libéré.self.a = @[@1, @2];
crée un autoreleasedNSArray
(ce qui signifie qu'il sera libéré automatiquement à un stade ultérieur) et les ayants droit que pourself.a
. Une fois le autoreleasepool est vidé le compte de référence de ce tableau est0
(en supposant qu'aucun autre de solides références) et il obtient désalloué.self.a
être une faiblesse de la variable est automatiquement mis à zéro.Si vous utilisez
[[NSArray alloc] init]
à l'initialisation de votre tableau et de l'affecter à un faible pointeur, l'objet sera libéré immédiatement après la cession. Dans leNSLog
,a
seranil
.Dans Xcode 4.6 le compilateur va vous en avertir le dernier cas.
OriginalL'auteur Sebastian
ARC Introduit une Nouvelle Vie Qualificatifs
il ne sera pas augmenter le nombre de références par 1. Il ne devient pas propriétaire de l'objet, mais seulement contient une référence à elle. Si la référence de l'objet compteur tombe à 0, même si vous pouvez toujours pointer vers ici, il sera libéré de la mémoire.
(nonatomic, copie, forte, faible)
Donc ici pour votre faibles de l'objet, il va affecter la valeur entrante à elle sans retenue. Et comme vous n'avez pas de contrôle sur l'objet de son vivant, L'objet que vous référencez faiblement seulement dans nos vies parce que au moins un autre objet détient une solide référence. Une fois que ce n'est plus le cas, l'objet est détruit et votre faiblesse de la propriété sera automatiquement mis à zéro après avoir utilisé une seule fois.
OriginalL'auteur βhargavḯ