2010-06-29 4 views
0

D'après ce que j'ai expérimenté, il semble que les objets ne peuvent pas être des membres de données partagées dans l'objectif c. Je sais que vous pouvez init un pointeur et allouer l'objet dans chaque méthode mais je n'arrive pas à comprendre comment on peut définir un NSMutableString en tant que membre de données et permettre à toutes les méthodes d'utiliser et de modifier ses données comme en C++. Est-ce vrai ou ai-je oublié quelque chose?Objet en tant que membre de données dans l'objectif C

+0

Avez-vous fourni des méthodes d'accesseur pour votre NSMutableString, ou le déclarer comme une propriété? – dreamlax

+1

Hé, ça doit être un de ces angles morts que tout le monde rencontre quand il apprend de nouvelles langues. Vous êtes tellement coincé dans les formes de votre propre langue que vous ne pouvez pas voir quelque chose de simple et évident. Tu vas te donner un coup de pied. ;-) – TechZen

Répondre

1

Il semble que vous souhaitiez synthétiser (créer des méthodes getter/setter) une propriété pour une variable membre. Je viens de trouver this cheat sheet, allez à la section intitulée, "Propriétés", devrait donner un aperçu rapide.

Autre que Apple's documentation devrait vous donner plus d'informations.

+0

Merci c'était juste ce que je cherchais ces deux lignes m'ont sauvé de grand chagrin: [totalAmount autorelease]; totalAmount = [input retain]; Je n'avais pas réalisé que l'iphone n'avait pas de garbage collection automatique. – jcb344

3

Pour définir une variable d'instance (membre), modifiez votre fichier .h:

@interface MyClass : NSObject { 
    // ivars go here 
    NSObject *member; 
} 
// methods go here 
@end 

Ensuite, dans votre fichier .m, de toute méthode d'instance (celui qui commence par -), vous pouvez accéder à cette variable.

- (void)doThingWithIvar { 
    [member doThing]; 
} 

Si vous souhaitez accéder à la variable de l'extérieur l'objet lui-même, vous aurez besoin d'accesseurs. Vous pouvez le faire facilement avec des propriétés Obj-C:

@interface MyClass : NSObject { 
    // ivars go here 
    NSObject *member; 
} 
// methods go here 
@property (nonatomic, retain) NSObject *member; 
@end 

Et dans le .m:

@implementation MyClass 
@synthesize member; 
// ... 
@end 

La ligne @synthesize crée des méthodes getter/setter pour l'Ivar. Ensuite, vous pouvez utiliser la syntaxe de la propriété:

MyClass *thing = ...; 
NSLog(@"%@", thing.member); // getting 
thing.member = obj; // setting 

(Notez que j'ai spécifié (retain) pour le @property, si votre membre n'est pas un objet Objective-C vous ne voulez pas que Et si la classe de votre propriété a une mutable. contrepartie, vous aurez besoin (copy) à la place.)

Questions connexes