当没有后备变量时,在Xcode调试器中查看合成属性的值

时间:2010-07-17 04:25:13

标签: iphone objective-c properties modern-runtime

我刚刚开始在我的iPhone项目中使用合成实例变量。问题是,我无法在调试器中看到合成的ivars。当没有使用显式声明的实例变量时,有没有办法在调试器中查看对象的属性?


我需要澄清第二个问题。我不是在询问如何访问属性或他们做什么;我知道那些东西。我认为,当使用基于this post的合成ivars时,无法无法直接访问实例变量。我显然能够做到我以前认为不可能的事情。我想知道发生了什么。

我正在使用Xcode 3.2.4 / iPhone模拟器/ LLVM编译器1.5。

3 个答案:

答案 0 :(得分:9)

已修改为第二部分添加答案:

这适用于Xcode 3.1,所以我不明白为什么它不适用于更高版本

您可以做的是在调试时从控制台直接向对象发送消息。

据推测,您已经在断点处停了下来,并且您正在查看调试视图中的变量。对于对象,这些显示指针。你可能看不到iVar,但你有指向对象的指针,你可以发送消息。例如:

  • 您已停在对象内的某个断点处
  • 变量视图显示self的指针地址(比方说)0x1031380
  • 在控制台类型po [0x1031380 title]中(请注意,没有分号)并输入
  • 您应该在控制台中看到您想要的内容。

当您使用(retain)声明属性并随后合成属性时,您将创建保留传递给它们的对象/值的setter。因此,在您的情况下,您应该将方法重写为:

- (void)viewDidLoad {
    self.title = @"woah";
}

字符串将作为setter的一部分保留。此外,我更喜欢将(copy)用于具有可变/不可变对(NSStringNSSetNSArray等的类集群。这样,财产就无法在外部改变。

答案 1 :(得分:5)

您不必使用变量的指针/地址。相反,你可以像这样使用变量名:

po [myVar title]
如果变量在范围内,xcode将帮助您键入变量名称(上面的myVar)。

答案 2 :(得分:0)

如果您不想手动键入po [blahblah],您可以执行xnav建议的here,您可以在标题中明确声明实例变量,或者在调试变量区右侧点击'self'并选择“Add Expression”,然后输入eg' _wordLength'和ivar将显示“