1

今天在我的代码中搜索错误时,我发现了一件奇怪的事情。在调试器中检查 UIView 实例时,Xcode 的变量视图不显示UIView类的子视图成员。

我只在调试器中看到这个字段(> 应该表示打开的三角形):

  • UIResponder

  • _层

  • _tabInfo

  • _gestureInfo

  • _touchData

  • _收费
  • _标签
  • _viewFlags

我错过了 _subviews 成员,并且想到了所有位置成员(至少其中一个应该在那里)。

有谁知道我错过了什么或做错了什么(据我所知,这不是问题,因为谷歌搜索这个问题没有给我任何结果)。

我使用 Xcode 3.1.3 版:

  • XcodeIDE:1191.0
  • XcodeCore:1192.0
  • Xcode支持:1186.0

在具有 OS 10.5.7 和 iPhone SDK 2.2.1 的 Mac 上(我还使用 iPhone SDK 3.0 进行了测试)。

我希望有人对此有所了解。它给了我一种奇怪的感觉,我不能相信调试器会告诉我调试问题时我应该知道的一切。如果您需要不信任您的工具,那就不好了:(

4

1 回答 1

2

调试器只能向您显示成员,而不是属性。请记住,这两者在 Objective C 中是不同的。属性只是 setter 和/或 getter 的语法糖。所以 UIView 的只读“子视图”属性只保证它有这个方法的实现:

- (NSArray *)subviews;

正如您所注意到的,Apple 已经使用未记录的成员变量实现了它们的许多属性,这些变量类似于它们相应的属性名称,但带有前导下划线。这使您可以窥探某些对象的内部,以了解在某些情况下发生了什么,但许多属性并未以如此透明的方式实现。在这些情况下,您需要将一些诊断代码注入您的应用程序以访问该属性并使用 NSLog 输出其返回值,和/或将值存储在您可以在调试器中观察到的临时变量中。

不要责怪可怜的调试器。它正在做它设计要做的事情。如果它有帮助,你可以责怪属性试图欺骗我们认为它们是成员变量,而它们实际上是方法。

于 2009-09-02T07:22:52.403 回答