Si j'essaie de libérer tempSeedsArray
après seedsArray = tempSeedsArray
, je reçois un EXEC_BAD_ACCESS
, et Instruments montre que tempSeedsArray
a été publié deux fois. Voici ma méthode viewWillAppear
:Quelle est la différence entre ces deux différentes lignes de l'objectif-C, et pourquoi travaille-t-on et pas l'autre?
- (void)viewWillAppear:(BOOL)animated {
NSString *arrayFilePath = [[NSBundle mainBundle] pathForResource:@"SeedsArray" ofType:@"plist"];
NSLog(@"HIT!");
NSMutableArray *tempSeedsArray = [[NSMutableArray alloc] initWithContentsOfFile:arrayFilePath];
seedsArray = tempSeedsArray;
NSLog(@"%u", [seedsArray retainCount]);
[seedsArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[super viewWillAppear:animated];
}
seedsArray
est un NSMutableArray défini comme un nonatomic
et une propriété retain
et est synthétisé.
Cependant, si je change seedsArray = tempSeedsArray
en self.seedsArray = tempSeedsArray
(ou [self seedsArray] = tempSeedsArray
etc.), je peux publier tempSeedsArray
. Quelqu'un pourrait-il m'expliquer simplement pourquoi cela est, car je suis très confus!
Merci
alors pourquoi est-ce que même si j'ai synthétisé 'seedsArray',' seedsArray = ... 'et' self.seedsArray = ... 'semblent se comporter différemment? (Je n'ai pas de setter personnalisé) – jrtc27
Parce que ces deux lignes ne sont pas les mêmes si vous synthétisez seedArray. Le premier affecte simplement le pointeur tempSeedsArray à la variable d'instance seedsArray. La seconde envoie un message setSeedsArray: à l'objet avec la propriété qui fait trois choses: 1. conserve l'objet référencé par tempSeedsArray, 2. affecte tempSeedsArray à la variable d'instance pour la propriété, 3. libère l'objet précédemment référencé par la variable d'instance . – JeremyP
ok merci les gens;) – jrtc27