Tengo una superclase y una subclase, que definen variables de instancia.Objective-C: variables de instancia fuera del alcance en el depurador
esbozo de superclase:
/* GenericClass.h */
@interface GenericClass : NSObject {
/* some variables */
}
@end
/* GenericClass.m */
@implementation GenericClass
/* ... */
@end
Esquema de la subclase:
/* 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];
}
Cuando utilizo las clases que heredan directamente de NSObject, uno no necesita el auto> puntero. Tenga en cuenta que no hay ningún objeto con el nombre str definido en el GenericClass padre. Entonces, mi pregunta es, ¿por qué está fuera de alcance cuando no se hace referencia a self-> str? El código en sí mismo funciona, pero no puedo leer la variable con el depurador
Esta es una buena aclaración de cómo funciona el GDB, ¡gracias! Pero hay una cosa que todavía me confunde. Tengo variables definidas en la superclase; llamemos a un NSMutableString * superstr. Una referencia a "superstr" en sí misma en la implementación de SpecificClass funciona bien. Pero intentar acceder a una variable "str" definida en SpecificClass.h no funciona en el depurador sin usar self->. ¿Cómo encuentra GDB una variable heredada, pero no una definida en el encabezado de esta clase? Si no estoy usando la herencia, esto también funciona bien. Parece un error en XCode –
Pruebe 'po str' y' po superstr' en la ventana de la consola del depurador (⇧⌘R). Si estos dan los mismos resultados, el problema no tiene nada que ver con Xcode (que es probable). –
Por extraño que parezca, po str y po superstr funcionan bien en la consola, al igual que po self-> str y po self-> superstr. Solo en la interfaz de usuario de depuración visual, donde la variable str sin self-> informa que está fuera del alcance cuando se mueve con el mouse, pero las operaciones de lectura/escritura en el código funcionan bien. Lo registraré como un error con Apple. Mientras tanto estoy usando self-> en todas partes (aunque preferiría no hacerlo) para poder depurar visualmente. –