Je l'ai fait de manière objective-C en arrière quand, et ont récemment (à savoir maintenant) lire la documentation sur le site d'Apple concernant l'utilisation de retain
et release
. Cependant, il y a un peu de code dans leur Creating an iPhone Application page qui m'a un peu confus:question de base sur conserver/sémantique de libération de la bibliothèque de référence d'Apple
- (void)setUpPlacardView
{
// Create the placard view -- it calculates its own frame based on its image.
PlacardView *aPlacardView = [[PlacardView alloc] init];
self.placardView = aPlacardView;
[aPlacardView release]; // What effect does this have on self.placardView?!
placardView.center = self.center;
[self addSubview:placardView];
}
Ne pas voir toute la classe, il semble que self.placardView
est aussi un PlacardView *
et l'affectation de celui-ci à aPlacardView
ne semblent indiquer qu'il conservera une référence à celui-ci. Donc, il me semble que la ligne que j'ai commentée ([aPlacardView release];
) pourrait avoir aPlacardView
ayant un nombre de retenue de 0 et donc désalloué. Depuis self.placardView
points, ne serait-ce pas maintenant à la mémoire désallouée et causer un problème?
Le concept de propriétés n'est pas mauvais, c'est la notation par points qu'Apple a introduite en même temps. temps. Il pollue la syntaxe et provoque une confusion sans fin. Personnellement, j'utilise beaucoup les propriétés, mais j'utilise la syntaxe Objective-C normale pour les obtenir et les définir. – JeremyP
Oui, je suis d'accord avec ça. C'est pourquoi j'ai mis des parenthèses autour du mot mal pour commencer. Pour moi, la notation par points est parfaitement OK; Je me rappelle toujours que ce sont des appels de méthodes. Mais je suis d'accord que c'est une grande source de confusion pour les débutants. – Yuji