Donc, supposons que vous ayez une variable locale NSArray * myArray déclarée dans votre fichier d'en-tête de classe.iPhone - initialisation des variables en utilisant self
Vous écrivez ensuite @property (nonatomic, retain) NSArray *myArray
également dans votre fichier d'en-tête.
Dans votre fichier .m, vous écrivez .
Tous très standard jusqu'à présent. Vous avez maintenant une variable myArray, qui peut être accessible via les setters et les getters synthétisés par Apple.
Un peu plus tard, vous initialisez votre variable.
NSArray *anArray = [[NSArray alloc] initWithObjects etc etc...];
self.myArray = anArray;
[anArray release];
Alors maintenant monTableau pointe vers un tableau en mémoire, ce qui a un compte de libération d'un (si je ne me trompe pas).
Ma question est, pourquoi ne pouvons-nous écrire
@property (nonatomic, assign) NSArray *myArray;
@synthesize myArray;
..et puis par écriture d'initialisation
self.myArray = [[NSArray alloc] initWithObjects etc etc...];
Cela a TOTALEMENT confondu moi depuis la première fois que je l'ai vu. Y a-t-il une raison technique à cela? Ou moral? ;-) Ou théorique?
Toute aide serait très apprécié ...
Vive
Karl ...
Merci, c'est ce que je pensais. Il semblerait que les seules raisons de ne pas faire cela sont celles que vous avez mentionnées (difficulté de gestion etc), mais techniquement, les deux sont identiques. Enfin, je peux dormir la nuit :-) –
Cela efface vraiment les problèmes techniques avec la technique. Ce n'est pas seulement un cas de "quand il y a plusieurs développeurs". Il y a toujours au moins deux partis au travail dans votre code - vous et Apple. Et Apple a rendu ses directives de gestion de la mémoire très explicites. – Chuck
Les directives ne sont que des lignes directrices, pas des erreurs de programmation. – hotpaw2