Objective-C:调试器中范围超出范围的实例变量

Objective-C:调试器中范围超出范围的实例变量,第1张

概述我有一个超类和一个子类,它们都定义了实例变量. 超类的粗略轮廓: /* GenericClass.h */@interface GenericClass : NSObject { /* some variables */}@end/* GenericClass.m */@implementation GenericClass /* ... */@end 子类概述: /* 我有一个超类和一个子类,它们都定义了实例变量.

超类的粗略轮廓:

/* 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的对象.
所以,我的问题是,为什么在未被引用为self-> str时超出范围?代码本身可以工作,但我无法使用调试器读取变量

解决方法 GDB不是Objective-C编译器.编译器知道Objective-C方法中的词法范围,但GDB没有.但是,它确实了解局部变量.

在Objective-C中,每个方法在调用时都会传递一个隐式自参数.因此,当你看看自我> str时,GDB正在解释它会解释任何其他局部变量评估.

当你试图自己评估str时,GDB将寻找一个名为str的局部变量,而不是找到一个,报告它不在范围内.这不是错误;这是预期的行为.

总结

以上是内存溢出为你收集整理的Objective-C:调试器中范围超出范围的实例变量全部内容,希望文章能够帮你解决Objective-C:调试器中范围超出范围的实例变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1034092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存