Objectif C classe statique des variables
Je suis nouveau à l'Objective-C et je suis de la lecture d'un livre intitulé "Visual Quickstart Guide: Objective-C" par Steven Holzner, Peachpit Press
Dans le Chapitre 6: Programmation Orientée Objet, il y a une section appelée à l'Aide de Variables de Classe où il écrit:
Vous pouvez créer des variables de classe pour une utilisation avec
vos classes, mais il y a un hic: chaque objet
de cette classe d'actions de la même variable, de sorte
si un objet de changements d'une variable de classe, qui
variable est modifié pour tous les objets. Vous créez
variables de classe avec le mot clé static.
Variables de classe sont souvent utiles: par exemple,
vous pouvez utiliser une variable de classe pour garder une trace de
le nombre d'objets d'une classe particulière créé
dans un programme. Vous allez faire dans cette tâche.
Et dit d'entrer le code suivant:
#import <stdio.h>
#import <Foundation/NSObject.h>
@interface TheClass: NSObject
static int count; //error: cannot declare variable inside @interface or @protocol
+(int) getCount;
@end
...
Ce code me donne une erreur dans Xcode 4:
Ne peut pas déclarer une variable à l'intérieur de @interface ou @protocole
Est le livre tort ou suis-je en train de faire quelque chose de mal?
- Le livre est complètement faux, il n'y a pas de notion de variable de classe Objective-C. Vous pouvez déclarer des variables statiques de la façon dont on le ferait en C, mais ils n'appartenant pas aux classes (au moins, pas du point de vue sémantique).
Vous devez vous connecter pour publier un commentaire.
Vous déclarez la variable statique dans le fichier d'implémentation (
.m
fichier). Cela devrait fonctionner:Ce n'est pas une variable de classe en soi; Objective-C n'a pas de notion de variable de classe. Toutefois, couplé avec la méthode de classe pour récupérer cette variable, il fonctionne de manière similaire à une variable de classe. Cependant, il est vraiment juste un C variable statique qui est accessible par l'implémentation de la classe.
J'ai vu un Visual Quickstart Guide sur Unix et suçait le gros temps. Ce ne semble pas être beaucoup mieux, au moins à partir de l'échantillon. La bonne façon de créer une variable de classe Objective-C ressemble à ceci:
C'est en fait une variable statique, pas un vrai variable de classe. Mais vous ne devriez pas vous soucier de variables de classe trop de toute façon, ils sont habituellement un signe que vous êtes en train de faire quelque chose de mal. (Je suis trop simplifier un peu, mais pas trop.)
Si vous êtes à la recherche pour une vie décente Objective-C livre, lire l'un par Apple. C'est gratuit et c'est une bonne lecture.
Si la "variable de classe" a besoin de plus que négligeable d'initialisation, utilisez
dispatch_once
:Vous devez déclarer la variable dans le .m fichier, où l' @mise en œuvre est mis. Donc,
Il est important de noter que l'Objective-C n'est pas réellement le soutien de variables de classe. Mais vous pouvez simuler avec des variables statiques, comme nous le faisons ici.