2010-11-17 19 views
2

voici ce que je suis en train de se convertir à c objectif de C#:à la recherche d'objectifs c NSList comme des options, (je sais qu'il a été demandé ici avant), quel exemple pourriez-vous fournir?

public class Television 
{ 
    public string Name {get; set}; 
    public bool isOn {get; set}; 
    public int channelNum {get; set}; 
    public string channelName {get; set}; 
} 

disons que la fée de la télévision a été à ma maison, et je ne sais pas combien de télévisions sont là-dedans. ou, je veux rendre ce code réutilisable et puisque tout le monde a une quantité différente de téléviseurs dans leurs ménages, je veux faire un nombre différent à chaque exécution.

public List<Television> TVs = new List<Television>(4); 

quand je veux je peux dire:

TVs[3].channelNum = 34; 
  1. dans c objectif, comment voulez-vous mettre cela dans un tableau/dictionnaire (Hashtable)? Peux-tu me donner un exemple?
  2. Si je créais un nouvel objet chaque fois qu'un nouveau téléviseur est mis dans la maison, et accédait à ses propriétés, est-ce plus efficace sur la mémoire qu'une classe de liste serait? il semble qu'une liste serait plus facile que de créer 4 ensembles de tableaux, n'est-ce pas?
  3. quelqu'un pourrait me donner un exemple de la façon dont cela serait utilisé si j'ai appelé

    Télévision TV = [[Télévision alloc] init];

    et utilisé des propriétés à la place? Puis-je utiliser des objets de télévision dans un nsmutablearray et les retirer pour accéder à leurs propriétés quand j'en ai besoin ou quand ils changent?

Répondre

3

Juste quelque chose pour vous donner une idée (bien que ce n'est pas très beau code) ...

@interface Television : NSObject { 
@private 
    NSString *name; 
    BOOL isOn; 
    int channelNumber; 
    NSString *channelName; 
} 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, assign, getter=isOn) BOOL on; 
@property (nonatomic, assign) int channelNumber; 
@property (nonatomic, copy) NSString* channelName; 
@end 

Implemenation

@implementation Television 
@synthesize name, on=isOn, channelNumber, channelName; 
@end 

Utilisation

Television *tv1 = [[[Television alloc] init] autorelease]; 
tv1.name = @"TV Name"; 
tv1.on = YES; 
tv1.channelNumber = 236; 
tv1.channelName = "Channel 236"; 

// create a mutable array to use as a list 
NSMutableArray *array = [NSMutableArray array]; 

// add tv1 to the array 
[array addObject:tv1]; 

// add another one 
[array addObject:[[[Television alloc] init] autorelease]]; 
[array objectAtIndex:1].name = @"Another name"; 
+0

Vous devriez probablement ajouter: wtf , Je ne peux pas créer de nouvelle ligne dans un commentaire? ugh, vous devriez ajouter un - (void) dealloc {méthode où vous faites [name release]; [release channelName]; [super dealloc]; – NSGod

+0

@PeyloW merci pour les améliorations, beaucoup mieux :) –

2

Je ne comprends pas ce que vous entendez dans votre numéro de point 2 (si vous avez une collection variable d'éléments dont vous avez besoin pour gérer et un tableau mutable fera, il suffit d'utiliser un tableau mutable - à savoir, éviter prématurée optimisation), mais pour le reste, c'est assez simple:

Voir NSMutableArray.

NSMutableArray * televisions = [NSMutableArray array]; 
Television * thisTV = [[Television alloc] init]; 
[televisions addObject:thisTV]; 
[thisTV release]; 

// ... 

[[televisions objectAtIndex:0] setChannelNumber:34]; 

ou NSMutableDictionary.

NSMutableDictionary * televisionsByRoomName = [NSMutableDictionary dictionary]; 
Television * thisTV = [[Television alloc] init]; 
[televisionsByRoomName setObject:thisTV forKey:@"livingroom"]; 
[thisTV release]; 
// ... 
[[televisionsByRoomName objectForKey:@"livingroom"] setChannelNumber:34]; 

Tout cela et plus peut être le vôtre pour le prix bas, bas de la lecture Collections Programming Topics qui est référencé dans plusieurs endroits dans la documentation de cacao conceptuelle d'introduction.