Objective-C: instance variables out of scope in debugger

I have a superclass and a subclass, both of which define instance variables.

Rough outline of superclass:

  • How do I access variable values from one view controller in another?
  • iPhone Objective-C programmatically adding scope buttons to a UISearchBar
  • objective c xcode 4.0.2: subclass can't access superclass variables “was not declared in this scope”
  • How do I access variables that are inside closures in Swift?
  • Objective C - XCode not recognizing variable outside of if statement
  • iOS Name of this way of building and returning an object in Objective-C
  • /* GenericClass.h */
    @interface GenericClass : NSObject {
        /* some variables */
    }
    @end
    /* GenericClass.m */
    @implementation GenericClass
        /* ... */
    @end
    

    Outline of subclass:

    /* 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];
    }
    

    When I am using classes that inherit directly from NSObject, one doesn’t need the self-> pointer. Note that there is no object with the name str defined in the parent GenericClass.
    So, my question is, why is str out of scope when not referenced as self->str? The code in itself works, but I can’t read the variable with the debugger

    Solutions Collect From Internet About “Objective-C: instance variables out of scope in debugger”

    GDB is not an Objective-C compiler. The compiler knows about things like lexical scope within Objective-C methods, but GDB does not. It does, however, understand local variables.

    In Objective-C, every method has an implicit self parameter passed to it when it’s called. So when you look at self->str, GDB is interpreting that like it would interpret any other local variable evaluation.

    When you try to evaluate str on its own, GDB will look for a local variable called str and, not finding one, reports that it’s not in scope. This is not an error; this is the expected behavior.