lundi 12 mars 2012

Synthétiser par défaut

Donc, à mon post précédent, Je vous ai dit que j'étais excité au sujet de la «synthèse par défaut" fonctionnalité qui est maintenant disponible dans LLVM 1.5. Et je suis très bien ainsi. Mais il s'avère qu'il ya une mise en garde que tempère mon excitation du moment.

Avec ivars synthétisés, nous avons eu un accès direct à la variable sous-jacente de synthèse pour un certain temps maintenant, donc si vous avez créé une classe comme ceci:

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController
{
}

@property (nonatomic, retain) NSString *foo;
@end


Vous êtes en mesure d'accéder à la variable foo NSString qui sauvegarde la propriété du même nom dans le champ de votre classe. Donc, dans votre méthode dealloc, vous pouvez le faire, pour donner un exemple courant:

- (void)dealloc
{
[foo release], foo = nil;
[super dealloc];
}

Cependant, si vous activez le «synthétiser par défaut» dans LLVM 1.5 et l'utiliser, ce qui signifie que vous n'avez pas vraiment une déclaration synthétiser pour la propriété @ toto, vous perdez cet accès direct aux variables sous-jacentes, vous laissant avec un peu d'une énigme - comment faites-vous votre nettoyage de la mémoire sans déclencher accidentellement une fonctionnalité non désirés, tels que ceux dans un accesseur paresseux ou des manipulateurs plus impliqués.

Plus tôt aujourd'hui, je tweeté une question poser des questions sur la façon correcte de traiter cette situation. Après un peu d'un Qui est le premier-Comme-et-vient avec beaucoup de gens intelligents, il est finalement sorti que cela est un bogue dans LLVM, et non pas une décision de conception intentionnelle. Espérons que cela sera corrigé avant trop longtemps, mais en attendant, la meilleure réponse est probablement juste garder à l'aide de synthétiser @.

Merci à a whole bunch of people on Twitter, many of whom I'm sure I missed!

Aucun commentaire: