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

kub*_*ubi 10 iphone properties objective-c modern-runtime

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


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

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

Abi*_*ern 9

编辑为第二部分添加答案:

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

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

大概你已经停在了一个断点处,你正在查看调试视图中的变量.对于对象,这些显示指针.你可能看不到iVar,但你有指向对象的指针,你可以发送消息.例如:

  • 你已经在对象内的某个断点处停了下来
  • 变量视图显示指针地址self(比如说)0x1031380.
  • 在控制台类型中po [0x1031380 title](注意没有分号)并输入
  • 你应该在控制台中看到你想要的东西.

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

- (void)viewDidLoad {
    self.title = @"woah";
}
Run Code Online (Sandbox Code Playgroud)

字符串将作为setter的一部分保留.另外,我更喜欢使用(copy)的具有可变/不可变的对类集群(NSString,NSSet,NSArray等).这样,财产不能在外部改变.

  • 实际上,它不是一个偏好的情况,因为你*应该*使用NSString等的复制属性,除非你有一个很好的理由不这样做. (2认同)
  • `po [0x1031380 title]`这就是答案,谢谢!必须使用文本命令才能看到iVars +没有直接访问iVars的保护意味着我可能不会继续使用合成iVars.这是一种痛苦,它似乎并没有真正让我有用. (2认同)

小智 5

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

po [myVar title]
Run Code Online (Sandbox Code Playgroud)

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