上一篇开发随笔主要介绍了Chisel的安装和常用命令功能简介.这一篇是实战篇,读者如果能实际操作一下,对Chisel会有更深的理解.
演示是的代码状态如下图:
演示代码pclass命令
这个命令可以打印类的继承关系,有了它,再也不怕记不住继承关系了.实例如下所示:
// 情景:打印时,断点在Viewcontroller中
(lldb) pclass self
ViewController
| UIViewController
| | UIResponder
| | | NSObject
(lldb)
pviews命令
这个命令可以打印自本视图起的视图层次和视图详细信息.打印中,竖线|
缩进代表父子关系.
<UIView: 0x7f824977cbc0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7f824977be60>>
| <_UILayoutGuide: 0x7f8249442020; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7f824977ab50>>
| <_UILayoutGuide: 0x7f82495867a0; frame = (0 667; 0 0); hidden = YES; layer = <CALayer: 0x7f824957fd70>>
| <UIView: 0x7f824977bf30; frame = (0 0; 300 300); layer = <CALayer: 0x7f824977c0a0>>
| | <UIView: 0x7f8249587770; frame = (0 0; 100 100); layer = <CALayer: 0x7f82495094d0>>
- 利用打印信息中的地址,可以针对每个视图进行操作.比如修改其颜色/显示/隐藏等.
2.利用属性值,判断布局问题.比如查看每个子视图没有显示的原因.
pvc命令
该命令和pviews功能相同,前者打印的控制器的层次关系和信息,而后者是针对视图的.
visualize命令
这个命令可以通过mac上自带的的图片预览软件直接查看视图,如image,view等.即便视图还没渲染出来时,也可以查看.
// 情景:视图还没渲染出来
(lldb) visualize self.view
visualize命令查看图
模拟器视图还未渲染
border命令
该命令可以显示视图的边界,在视图层次比较复杂时,更容易找到目标视图.
// 显示redView边界
// --color/-c <color>; Type: string
(lldb) border redView -c green
(lldb) visualize self.view
(lldb)
显示边界
fv命令
该命令是搜索上下文特定的视图,可以通过正则表达式匹配.
(lldb) fv scrollView
0x18d3b8c0 UIScrollView
0x137d0c50 UIScrollView
0x131b1580 UIScrollView
0x131b2070 UIScrollView
fvc命令
该命令同fv,类似于pviews和pvc的关系.
(lldb) fvc Home
0x1393fe00 HomeFeedsViewController
hide/show命令
hide隐藏视图,便于看清层次关系.show显示隐藏视图.
// 隐藏blueView
(lldb) hide blueView
(lldb) visualize self.view
隐藏blueView
*** pinternals命令***
这个命令主要是打印View内部的详细信息,可以根据信息确定View的状态.
// 查看redView内部结构
(lldb) pinternals redView
(UIView) $2 = {
UIResponder = {
NSObject = {
isa = UIView
}
_hasAlternateNextResponder = false
_hasInputAssistantItem = false
}
_constraintsExceptingSubviewAutoresizingConstraints = nil
_cachedTraitCollection = nil
_layer = 0x00007f8bc1724870
_layerRetained = nil
_gestureInfo = nil
_gestureRecognizers = nil
_subviewCache = 0x00007f8bc1701900
_templateLayoutView = nil
_charge = 0
_tag = 0
_viewDelegate = nil
_backgroundColorSystemColorName = 0xa0014029b0c20c58 @"redColor"
_countOfMotionEffectsInSubtree = 0
_countOfTraitChangeRespondersInDirectSubtree = 0
_cachedScreenScale = 0
_retainCount = 2
_tintAdjustmentDimmingCount = 0
_shouldArchiveUIAppearanceTags = false
_interactionTintColor = nil
_layoutMarginsGuide = nil
_minXVariable = nil
_minYVariable = nil
_boundsWidthVariable = nil
_boundsHeightVariable = nil
_layoutEngine = nil
_layoutDebuggingIdentifier = nil
_internalConstraints = nil
_continuousCornerRadius = 0
_countOfFocusedAncestorTrackingViewsInSubtree = 0
_semanticContentAttribute = 0
__presentationControllerToNotifyOnLayoutSubviews = nil
_previewingSegueTemplateStorage = nil
_contentSizeNotificationToken = nil
_readableContentGuide = nil
}
以上这些在调试UI时比较常用且比较方便.Chisel提供的命令不止这些,可以通过help命令查看使用方法.
*温馨提示: cmd + k 可以清除控制台输出.