在调试时我们如何知道UIView的帧或它是如何存储的?

时间:2012-10-23 23:34:40

标签: objective-c xcode4.5

看看下面的图片

enter image description here

我正在寻找UIView,我找不到这个所谓的_frame struct。

苹果内部如何存储UIView框架?在调试过程中找到它的最简单方法是什么?

1 个答案:

答案 0 :(得分:3)

UIView不存储其框架;它只返回它的图层框架。

CALayer也不存储其框架。当您向图层询问其图层时,图层会根据图层boundspositionanchorPointtransform计算图层。 (可能它会缓存计算出的frame,但如果您反汇编-[CALayer frame]方法,您将找到用于从其他属性计算它的代码。)

并且CALayer不会在实例变量中存储任何这些属性。相反,它有一个指向CA::Layer实例的指针,该实例是一个私有C ++对象。该C ++对象存储图层的属性。 view->_layer->_attr.layer字段是指向私有CA::Layer实例的指针。

如果要在调试器中查看视图的帧,则必须向其发送消息。您可以询问它的描述:

po _topBubble

或者你可以问它的框架:

p (CGRect)[_topBubble frame]