objective-c - 在 Xcode 中调试属性

标签 objective-c ios xcode

所以我在一些示例代码中使用了一些属性。特别是 UIView 类的“tag”属性。现在我设置这个属性,如果我 NSLog它,或者根据标签的值设置控制语句,我可以看到我设置的值在那里,并且按预期进行操作。

但是,如果我将鼠标悬停在 .tag 上以查看其中有哪个标签值,则我从 Xcode 中什么也得不到。没有弹出显示该值的窗口。然后我进入自动/本地/全部窗口,尝试“添加表达式...”(似乎这是设置传统“监视”变量的唯一方法,如果有其他方法,请告诉我)。无论如何,我将 object.tag 放入“监视”窗口中,它是空白的。没有值(value)。它不是零,只是什么都没有,就好像它不存在一样。

当然,如果我将鼠标悬停在“object.tag”的“object”部分上,那么我会弹出一个带有显示三角形的对象的弹出窗口,我将其展开,然后我去寻找“_tag”(其中似乎是底层实例变量)。

那么这有什么困难呢?为什么在调试期间无法通过简单地将鼠标悬停在标签属性上来查看标签属性?这与 Xcode dev 中的属性有关吗?

我正在运行 Xcode 4.3.2

最佳答案

tag属性与任何其他 Objective-C 属性一样,是一种语法糖。事实上,属性是作为访问器方法实现的,而访问器方法又被转换为 objc_msgSend()函数调用。这种机制与访问结构体字段完全不同。

调试器基本上可以显示结构中的任何字段,因为它不需要任何特殊知识并且不会产生任何后果。只需要结构定义。另一方面,获取 Objective-C 属性的值需要在流程上下文中执行代码。您可以在调试器控制台中手动执行此操作,但调试器不会自动执行此操作。

我认为这在理论上仍然是可能的,在个别情况下,但非常困难。考虑执行访问器方法会更改对象的内部状态的情况。例如调用-[UIViewController view] (访问其 view 属性)导致加载 View 。还可能调用委托(delegate)方法等。在这种情况下,将鼠标悬停在 IDE 中的属性上会改变进程的执行状态,从而使调试本身成为一个笑话。

关于objective-c - 在 Xcode 中调试属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035050/

相关文章:

ios - 在 xcode 中第一次运行时动画卡顿

ios - 人们为什么倾向于将NSURL存储为NSString

ios - swift 扩展

xcode - 从 pod 安装库时出错

ios - 项目在 XCode 中编译,但 XCodeBuild 产生错误 "No architectures ..."

iphone - NSPredicate 嵌套关系

ios - 如何在 Swift 中访问 iOS 私有(private) API?

ios - 为 iOS 应用程序创建临时分发

iOS:如何以编程方式将 View 添加到 Storyboard View

ios - 在 Objective C 中不使用 switch 语句显示评级图像的最佳实践