Objective-C的:实例变量的出调试范围(Objective-C: instance vari

2019-07-28 11:12发布

我有一个超类和子类,这两个定义实例变量。

超类的粗略轮廓:

/* GenericClass.h */
@interface GenericClass : NSObject {
    /* some variables */
}
@end
/* GenericClass.m */
@implementation GenericClass
    /* ... */
@end

子类概况:

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

当我使用直接从NSObject的继承类,一个不需要自我>指针。 请注意,是与父GenericClass定义的名称海峡没有对象。 所以,我的问题是,为什么STR超出范围时,没有自我> STR引用? 在本身的代码工作,但我不能与调试器读取变量

Answer 1:

GDB不是一个Objective-C编译器。 编译器知道这样的事情Objective-C的方法中的词法范围,但是GDB没有。 它,然而,了解局部变量。

在Objective-C,每一个方法都有一个隐含的self传递给它的参数时,它被称为。 所以,当你在self->str ,GDB的解释是像它会解释任何其他局部变量的评价。

当您尝试评估str自身,GDB会寻找一个局部变量叫str ,并没有找到一个报告说,它不是在范围之内。 这是不是一个错误; 这是预期的行为。



文章来源: Objective-C: instance variables out of scope in debugger