218 votes

Comment pour déclarer des propriétés de classe-niveau en Objective-C ?

C’est peut-être évident, mais je ne sais pas comment déclarer des propriétés de la classe en Objective-C.

J’ai besoin de cache un dictionnaire par classe et étonnant comment mettre dans la classe.

199voto

Andrew Grant Points 35305

Propriétés ont un sens particulier en Objective-C, mais je pense que tu veux dire quelque chose qui est équivalente à une variable statique ? Par exemple seul instance pour tous les types de Foo ?

Pour déclarer des fonctions de classe en Objective-C, vous utilisez le + préfixe au lieu de - si votre implémentation pourrait ressembler à :

117voto

spooki Points 421

J’utilise cette solution :

Et je l’ai trouvé très utile en remplacement du pattern Singleton.

Pour l’utiliser, simplement accéder à vos données avec la notation par points :

64voto

Jim Puls Points 29289

Si vous cherchez l’équivalent de niveau classe de , alors la réponse est « il n’y a aucune une telle chose ». Mais n’oubliez pas, est le seul sucre syntaxique, en tout cas ; il crée juste méthodes objet bien-nommé.

Vous souhaitez créer des méthodes de la classe qui accèdent à des variables statiques, qui, comme d’autres l’ont dit, ont seulement une syntaxe légèrement différente.

22voto

Quentin Points 2309

Car à la réponse de Andrew Grant, il devrait être un peu changé pour la sécurité des threads :

Ces modifications assurent que fooDict est créée uniquement une fois.

De la documentation Apple: « dispatch_once - exécute un objet bloc une fois et une seule fois pendant la durée de vie d’une application. »

7voto

mouviciel Points 36624

Les propriétés ont des valeurs uniquement dans les objets, et non des classes.

Si vous avez besoin de stocker quelque chose pour tous les objets d'une classe, vous devez utiliser une variable globale. Vous pouvez le masquer en déclarant static dans le fichier d'implémentation.

Vous pouvez également envisager d'utiliser des relations spécifiques entre vos objets: vous attribuer un rôle de maître à un objet spécifique de votre classe et de votre lien d'autres objets de ce maître. Le maître va tenir le dictionnaire comme une simple propriété. Je pense à un arbre comme celui utilisé pour le point de vue de la hiérarchie dans les applications Cocoa.

Une autre option est de créer un objet d'une classe dédiée qui est composée à la fois de votre "classe" dictionnaire et d'un ensemble de tous les objets liés à ce dictionnaire. C'est quelque chose comme NSAutoreleasePool de Cacao.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X