2009-09-08 6 views
2

Je me trouve en train de déclarer des tas de variables de classe et il est vraiment fatigant d'écrire des méthodes get/set simples pour chaque variable. Donc, la question est de savoir comment synthétiser setters/getter pour les variables de classe dans objective-c?Existe-t-il un moyen de synthétiser des setters/getters pour les variables de classe en Objective-C?

+1

Qu'entendez-vous par "variables de classe"? ? Objective-C n'a pas ce genre de construction. Il existe des variables d'instance, des variables locales, des variables globales et des variables statiques, mais pas de variables de classe. – Chuck

+0

variables statiques –

Répondre

4

Habituellement, lorsque vous regroupez un ensemble de variables connexes qui sont destinés à être accessibles globalement, vous créez ce qu'on appelle un Singleton:

What should my Objective-C singleton look like?

Cela signifie que vous avez une méthode de niveau de classe qui vous donne retour une instance commune - donc vous auriez un appel comme:

[MyClass sharedInstance].myProperty 

Puisque les valeurs que vous stockez sont de véritables variables d'instance de classe, vous pouvez utiliser les propriétés normales, mais toutes les classes travaillera avec le même données partagées.

Notez que certaines personnes n'aiment l'utilisation de singletons, vous pouvez lire des mises en garde au sujet de la pratique:

Singleton: How should it be used

Mais puisque vous commencez déjà avec un singleton inhérent au développement iPhone (le délégué de l'application , auquel tout le monde peut avoir accès à tout moment) faire une légère utilisation de la technique ne fait pas de mal si vous êtes prudent. Notez qu'au lieu de créer une classe Singleton, une alternative est que le délégué d'application crée une seule instance d'une classe de stockage variable et que tout le monde y accède via le délégué ...

+0

Je suppose que je vais devoir m'en tenir à cette technique ... –

0

Pouvez-vous pas juste en éditeur macro ou quelque chose?

1

quelque chose comme ça va dans votre tête, après l'interface:

@property (retain) NSString* caption; 

alors cela va immediatley dans la mise en œuvre:

@synthesize caption; 

Vérifiez ce tutoriel pour plus de détails: http://www.cocoadevcentral.com/d/learn_objectivec/

+0

Vous devez également noter que cela suppose une légende nommée ivar avec NSString * comme type – rpetrich

+0

C'est ce que les variables instantanées, mais qu'en est-il d'autres types (comme statique)? –

+1

@Dennis: Non, vous ne pouvez pas utiliser les propriétés sur les classes, seulement sur les instances d'objets. Pour les variables de classe, vous devez implémenter les méthodes de classe getter et setter manuellement. – PeyloW

0

Une propriété n'a pas besoin de référencer un ivar. Vous pouvez avoir une propriété dynamique renvoyer une variable statique si vous le voulez vraiment. Utilisez simplement @dynamic et implémentez getter et setter pour référencer les variables statiques de votre fichier d'implémentation.

+0

Sauf que vous auriez besoin d'une instance pour appeler la propriété, au lieu de n'utiliser que le nom de la classe ... –

Questions connexes