2009-03-11 5 views
1

Je veux créer une classe spéciale pour contenir beaucoup de valeurs comme strName, strNo, intPassword ... Ainsi, plusieurs autres classes peuvent modifier la même valeur dans cette classe. Je veux utiliser la syntaxe à points pour appeler ses propriétés comme Comment concevoir une classe statique?

Values.strName = ...;
Je ne veux pas initialiser la classe à chaque fois avant de lire/écrire ses valeurs car certaines de ses valeurs sont toujours utilisées.

j'appelle la classe « valeurs » et la conception en utilisant le code suivant:

@interface Values : NSObject { 
    IBOutlet NSString *strName; 
} 
@property (nonatomic, copy) NSString *strName; 
@end

importer des « Values.h » à une autre classe et appelle la propriété à l'aide


Values.strName = @"Name"; 

Je don Ne créez pas un objet de "Valeurs" pour éviter que les données ne soient écrasées. Une erreur apparaît indiquant que 'erreur de syntaxe avant. jeton'. Toute autre façon de créer une classe stockant des variables globales, mais n'a pas besoin d'être initialisée lors de l'utilisation de ces données?

Répondre

4

Une autre solution à ce problème consiste à ajouter les variables (ou classes) à l'objet AppDelegate.Il est facile pour l'AppDelegate de devenir une boule de duvet, mais si ces variables sont vraiment propres à votre application, c'est le bon endroit où aller.

Vous pouvez toujours obtenir une référence à votre AppDelegate en utilisant [UIApplication sharedApplication].delegate (vous devrez peut-être lancer ce)

+0

Bonne idée! Cela peut être le moyen le plus simple de stocker des variables globales. Merci. –

+0

Une autre façon, au moins sur Mac, serait de sous-classer NSApplication et d'y mettre les propriétés. Je ne sais pas si vous pouvez le faire avec UIApplication. –

+0

Bonne suggestion. Après quelques tentatives, je trouve que je peux déclarer une nouvelle classe tout comme la classe delegate pour stocker des données globales. Merci. –

2

Si vous utilisez un motif singleton, vous pouvez réaliser quelque chose de proche. En utilisant l'assistant 'SynthesizeSingleton.h' par Matt Gallagher:

// Values.h 
#import "SynthesizeSingleton.h" 

@interface Values : NSObject { 
    ... 
} 

// props 

+ (Values *)sharedValues; 
@end 

// Values.m 
@implementation Values 

SYNTHESIZE_SINGLETON(Values); 

@synthesize props; 

@end 

ensuite utiliser votre singleton:

NSString *myVal = [[Values sharedValues] someValue];

ou:

Values *v = [Values sharedValues];

NSString *myVal = v.someValue;

3

Je veux créer une classe spéciale pour la tenue de beaucoup de valeurs comme strName, strNo, intPassword ...

Pourquoi? Il n'y a rien de mal à mettre des objets immuables et primitifs en lecture seule des variables globales:

NSString *const strName = @"Name"; 
const NSInteger intPassword = 0xDEADBEEF; 

Si vous voulez les préfixe comme étant globals, « g » (comme dans gStrName, etc.) est commun et fonctionne très bien.

Vous pourriez être tenté de dire "mais les globals sont mauvais!", Mais pensez à ce que vous dites: Pourquoi les globals sont-ils mauvais?

  • Parce que l'autre code peut changer les objets. (Pas si avec des objets immuables.)
  • Parce que l'autre code peut remplacer les objets. (Ce n'est pas le cas avec les variables en lecture seule (const).)
  • Parce que deux morceaux de code peuvent utiliser le même objet. (Pas de problème si l'objet est basique, comme une chaîne ou un entier.)

Tant qu'aucune de ces plaintes ne s'applique, il n'y a rien de mal avec les variables globales. Ils sont assez communs dans Cocoa (la plupart de ses constantes de chaîne, par exemple, sont en fait des variables globales).

+0

La raison pour laquelle je veux créer cette classe est que cette classe est utilisée pour laisser d'autres classes lire et écrire sa valeur (plusieurs classes peuvent modifier la même valeur). J'oublie de mentionner: ces valeurs ne sont pas const. –

Questions connexes