J'ai une superclasse et une sous-classe, qui toutes deux définissent des variables d'instance.Objective-C: variables d'instance hors de portée dans le débogueur
ébauche de superclasse:
/* GenericClass.h */
@interface GenericClass : NSObject {
/* some variables */
}
@end
/* GenericClass.m */
@implementation GenericClass
/* ... */
@end
Aperçu de la sous-classe:
/* SpecificClass.h */
#import "GenericClass.h"
@interface SpecificClass : GenericClass {
NSMutableString *str;
}
/* SpecificClass.m */
#import "SpecificClass.h"
@implementation SpecificClass
- (void)aMethod {
//Debugger reports str as out of scope
str = [[NSMutableString alloc] initWithCapacity:100];
//Works fine:
self->str = [[NSMutableString alloc] initWithCapacity:100];
//Doesn't compile as I haven't defined @property/@synthesize:
self.str = [[NSMutableString alloc] initWithCapacity:100];
}
Quand je suis en utilisant des classes qui héritent directement de NSObject, on n'a pas besoin de l'auto> pointeur. Notez qu'il n'y a pas d'objet avec le nom str défini dans la classe GenericClass parent. Donc, ma question est, pourquoi est str hors de portée quand il n'est pas référencé comme self-> str? Le code en lui-même fonctionne, mais je ne peux pas lire la variable avec le débogueur
Ceci est une bonne clarification du fonctionnement de la GDB, merci! Mais il y a une chose qui me trouble encore. J'ai des variables définies dans la superclasse; appelons un NSMutableString * superstr. Une référence à "superstr" seul dans l'implémentation de SpecificClass fonctionne bien. Mais tenter d'accéder à une variable "str" définie dans SpecificClass.h ne fonctionne pas dans le débogueur sans utiliser self->. Comment GDB trouve-t-il une variable héritée, mais pas une variable définie dans l'en-tête de cette classe? Si je n'utilise pas l'héritage, cela fonctionne aussi très bien. Cela ressemble à un bogue dans XCode –
Essayez 'po str' et' po superstr' dans la fenêtre de la console du débogueur (⇧⌘R). Si ceux-ci donnent les mêmes résultats, le problème n'a rien à voir avec Xcode (ce qui est probable). –
Assez curieusement, po str et po superstr fonctionnent bien dans la console, tout comme po self-> str et po self-> superstr. C'est uniquement dans l'interface utilisateur de débogage visuel que la variable str sans auto-> rapports est hors champ lorsqu'elle est déplacée avec la souris, mais les opérations de lecture/écriture dans le code fonctionnent très bien. Je vais l'enregistrer comme un bug avec Apple. Pendant ce temps, j'utilise self-> partout (bien que je préfère ne pas le faire) afin que je puisse déboguer visuellement. –