我最近才开始在我的 iPhone 项目中使用合成实例变量。问题是,我在调试器中看不到合成的 ivar。当调试器不使用显式声明的实例变量时,有什么方法可以在调试器中查看对象的属性?
我需要澄清第二个问题。我不是在问如何访问属性,或者它们的作用;我知道所有这些东西。我的印象是,在使用基于 this post 的合成 ivar 时,您无法直接访问实例变量。 .我显然已经能够做到我以前认为不可能的事情。我想知道发生了什么事。
我正在使用 Xcode 3.2.4/iPhone 模拟器/LLVM 编译器 1.5。
最佳答案
编辑为第二部分添加答案:
这适用于 Xcode 3.1,所以我不明白为什么它不适用于更高版本
您可以做的是在调试时从控制台直接向对象发送消息。
假设您已在断点处停止,并且正在查看调试 View 中的变量。对于对象,这些向您显示指针。你可能看不到 iVar,但你有指向对象的指针,你可以向它发送消息。例如:
- 您已在对象内的某个断点处停止
- 变量 View 显示
self
的指针地址为(比方说)0x1031380
。 - 在控制台输入
po [0x1031380 title]
(注意没有分号)然后输入 - 您应该会在控制台中看到您想要的内容。
当您使用 (retain)
声明一个属性并随后合成该属性时,您正在创建保留传递给它们的对象/值的 setter。所以在你上面的例子中,你应该将方法重写为:
- (void)viewDidLoad {
self.title = @"woah";
}
并且字符串将保留为 setter 的一部分。此外,我更喜欢将 (copy)
用于具有可变/不可变对的类集群(NSString
、NSSet
、NSArray
等)。这样,该属性就无法从外部更改。
关于iphone - 在没有支持变量的情况下在 Xcode 调试器中查看合成属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3270248/