À l'aide de mot-clé static en objective-c lors de la définition d'une variable mise en cache
Je suis à la recherche à la suite d'apple exemple de code source:
/*
Cache the formatter. Normally you would use one of the date formatter styles (such as NSDateFormatterShortStyle), but here we want a specific format that excludes seconds.
*/
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"h:mm a"];
}
Essayer de comprendre:
-
Pourquoi utiliser le mot-clé static?
-
Comment cela équivaut à une variable mise en cache si vous le réglez à zéro chaque fois que la méthode est appelée.
Le code est à partir de l'Exemple 4 dans le Tableview Suite démo
Vous devez vous connecter pour publier un commentaire.
Variables statiques de conserver leurs valeurs assignées à répétition, des appels à la fonction. Ils sont un peu comme des valeurs globales qui ne sont "visibles" à cette fonction.
L'initialiseur de déclaration n'est exécuté qu'une fois cependant.
Ce code initialise dateFormatter à zéro la première fois que la fonction est utilisée. Sur chaque appel à la fonction, une vérification est faite contre-valeur de dateFormatter. Si ce n'est pas définie (qui ne sera vrai que la première fois) d'un nouveau dateFormatter est créé. Si elle est définie, alors la statique dateFormatter variable sera utilisée à la place.
Il vaut la peine de se familiariser avec les variables statiques. Ils peuvent être très pratique, mais ont des inconvénients trop (dans cet exemple, il est impossible de libérer le dateFormatter objet par exemple).
Juste un conseil: Parfois, il peut être éducatif pour placer un point d'arrêt dans le code et d'avoir un oeil pour voir ce qu'il se passe. Comme la complexité de vos programmes d'augmenter, cela deviendra une compétence précieuse.
"
static
" fonctionnellement signifie "ne pas évaluer les trucs sur la partie droite du signe d'égalité à chaque fois à travers, l'utilisation de sa valeur précédente à la place" dans cette affaire.D'utiliser cette grande puissance avec une grande responsabilité: vous courez le risque de l'utilisation de toute une tonne de mémoire, puisque ce sont des objets qui ne disparaîtra jamais. Il est rarement approprié, sauf dans des cas comme celui-ci avec
NSDateFormatter
.À des fins de référence, c'est la façon dont je suis l'aide de la statique pour ma date de formateur pour l'utiliser dans une table view controller.