2010-09-02 4 views

Répondre

1

Vous pouvez appeler en utilisant ceci:

MyClass *a; 
a.str; 

Sans l'objet, vous ne pouvez pas appeler une variable d'instance. Cependant, vous pouvez appeler la méthode statique avec cette déclaration:

@interface MyClass:NSObject 

+ (void)doX; 

@end 

@implementation 

+ (void)doX { 
    // do whatever 
} 

puis dans une autre classe que vous avez juste besoin d'appeler:

[MyClass doX]; 

Cependant, laisser une variable d'instance publique n'est pas une bonne pratique. La raison en est qu'il laissera n'importe quelle classe, méthodes changer cette variable d'instance sans votre contrôle. Par exemple, ils peuvent mettre NSString * str à zéro et alors personne ne peut rien appeler, ou ils peuvent oublier de faire de la gestion de la mémoire lorsqu'ils appellent.

Une meilleure pratique pour la variable publique utilise @property

Par exemple, votre chaîne doit être déclarée comme:

@property (nonatomic, retain) NSString * str; 

puis dans la mise en œuvre:

@implementation MyClass 

@synthesize str; 

La bonne chose A propos de la propriété, le compilateur générera des méthodes de gettter et setter pour vous et ces setters géreront la mémoire correctement pour vous.

En savoir plus sur properties here

0

Soupir, je me rends compte ce post est mort depuis longtemps, mais je crois que la réponse ci-dessus est incorrecte. bien le premier bit.

Veuillez voir le lien ci-dessous. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW1

pour l'interface ci-dessus fonctionne, vous devez déclarer une propriété pour une utilisation en dehors de sa classe Parce que la variable d'instance ne soit pas visible en dehors de sa classe.

puits; Vous n'avez pas besoin de. Faire quelque chose comme MyClass-> str est valide.

S'il vous plaît voir cet exemple

@interface Foo : NSObject { 

@public NSInteger publicMember; 
@private NSInteger aproperty; 

} 
@property (assign) NSInteger aproperty;` 

alors la classe d'appel

Foo *f = [Foo new]; 
f.aproperty = 90; 
//f.publicMember = 100; property 'publicMember' not found of type Foo * 
f->publicMember = 100; 

Mais comme le post ci-dessus dit, vous devriez toujours utiliser @properties parce que si public var était une chaîne, vous n'êtes pas retenir la corde de quelque façon que ce soit.

Questions connexes