今天在搜索我的代码中的错误时,我发现了一件奇怪的事情。在调试器中检查UIView实例时,Xcode的变量视图不会显示 UIView 类的子视图成员。
我只在调试器中看到这些字段(>应该表示开头的三角形):
UIResponder
_layer
_tabInfo
_gestureInfo
_touchData
_viewFlags
我错过了_subviews会员,并想到了所有的位置成员(至少其中一个应该在那里)。
有没有人知道我错过了什么或做错了(据我所知,这不是问题,因为谷歌搜索这个问题没有得到任何结果)。
我使用Xcode 3.1.3版本:
在带有OS 10.5.7和iPhone SDK 2.2.1的Mac上(我还使用iPhone SDK 3.0进行了测试)。
我希望有人对此有所了解。它让我有点奇怪的感觉,我不能相信调试器向我展示我应该知道的调试问题的一切。如果您需要不信任工具,那就不好了:(
答案 0 :(得分:2)
调试器只能向您显示成员,而不是属性。请记住,两者在目标C中是不同的。属性只是一个setter和/或getter的语法糖。因此,UIView的只读“subviews”属性仅保证它具有此方法的实现:
- (NSArray *)subviews;
正如您所注意到的,Apple已经使用类似于其相应属性名称但带有前导下划线的未记录成员变量实现了许多属性。这允许您监视某些对象的内部以查看在某些情况下发生的情况,但许多属性未以这种透明的方式实现。在这些情况下,您需要在应用程序中注入一些诊断代码以访问属性并使用NSLog输出其返回值,和/或将值存储在您可以在调试器中观察到的临时变量中。
不要责怪糟糕的调试器。它正在完成它的设计目标。如果它有所帮助,你可以责怪属性试图欺骗我们认为它们是成员变量,当它们真的是方法时。