赞
踩
本文分为
使用技巧
面包屑导航
批量Rename
快速查看文档
代码折叠
调试技巧(debugging)
日志打印(log)
断点调试(Breakpoint)
条件断点(conditional BreakPoint)
UI层级(UI Hierarchy)
内存层级(Memory Graph Hierarchy)
使用技巧
面包屑导航
批量Rename
快速查看文档
代码折叠
面包屑导航
点击导航栏面包屑可以快速点位到该文件代码中的某部分,有助于快速找到文件中的变量或者函数。
批量Rename 重命名
Command+左键 呼出菜单,可以批量Rename
快速查看文档
option+左键点击变量或参数名,可快速呼出文档,点击下方的“Open in Developer Documentation”,可以查看文档全文。
代码折叠
在「Preferences」-「Text Editing」中,可以启用默认关闭的「Code folding ribbon」功能
开启后,代码左侧会显示折叠条,点击即可收起或者展开代码,便于简化显示复杂嵌套关系的代码。
debugging调试技巧
日志打印(log)
断点调试(Breakpoint)
条件断点(conditional BreakPoint)
UI层级(UI Hierarchy)
内存层级(Memory Graph Hierarchy)
日志打印-Log
log是最简单直接的调试方法了,我们一般会在代码中添加 print("this is log \(property name)")这样的语句,来查看运行是否符合预期,这样在运行时,相应的结果就会输入在console中。
log更多用于我们查看程序运行是否如我们所想,而不是用于定位问题。它有几个缺点,
一、需要修改代码,这意味着如果问题解决,我们还需要记得把print语句注释或者删掉;
二、我们需要把关心的变量打印出来,但如果关心的变量较多,很不方便;
三、无法指定条件print,除非我们增加一个if语句
四、无法单步调试
以上缺点决定了log在定位复杂问题时效率不高,这时候就需要用上断点调试(Breakpoint)了。
断点调试-Breakpoint
要启用断点调试很简单,只需要在代码行数附近单击,就会出现一个蓝色的箭头。运行程序,当程序执行到这一行代码时,程序暂停,断点调试界面会显示当前各变量的值,如下图所示:
断点调试很高的弥补了log打印日志的缺点
一、它无需改动代码;
二、程序暂停后,可以查看所有相关的变量当前的值,这非常有助于我们定位问题,同时又不需要把所有的值print出来;
三、支持单步调试,点击上图调试界面中上方左数第4个图标,我们可以逐步运行,同时查看每步运行后程序的状态;
综上,非常建议在遇到问题时选用断点调试而不是log来定位问题。
条件断点-conditional BreakPoint
如果在某个循环中(1000次循环),我们只想在循环中的某种情况下让程序停下来,而不是手动点击下一步1000次,那该怎么办?这时候我们可以使用条件断点。在之前断点的蓝色箭头标识上点击右键,选择「Edit BreakPoint」,我们就可以给断点增加触发的条件。
UI层级(UI Hierarchy)
上面讲的几种调试方法,在调试UI界面时就比较吃力了。调试UI我们更关心的是界面的边距、层级等等参数。
当然我们可以用SwiftUI中的Preview来调试,但是Preview是基于单个View而非整个程序,另外为了让某些子View的Preview可以运行,我们常常需要额外的工作。
所以,UI Hierarchy就是另外一个可行的方法,在程序运行后,点击下图红框部分,
在菜单中选中「View UI Hierarchy」
这时候我们就可以看到我们当前程序运行页面的完整UI布局,左侧则是视图的层级关系,点击左侧的子视图,右侧的UI图有高亮显示选中部分。
这个UI Hierarchy View非常有助于我们定位UI视图不符合我们预期的问题,我们快速查看是哪一层出现了问题。
左右拖动视图,还可以看到视图层级的3D效果,amazing。
内存层级-Memory Graph Hierarchy
同样是在「View UI Hierarchy」那个菜单,有一个「View Memory Graph Hierarchy」选项,点击即可看到内存层级视图:
这个视图有什么用呢?我们知道,内存泄露的原因是因为我们持有在程序运行过程中一直持有对某个引用类型的引用,导致系统无法释放这部分内存
如果我们发现在运行过程中,内存占用持续增加,那么就可以在「Memory Graph Hierarchy」中查看哪些占用了内存,通过层级图,我们可以清晰地看到该变量是被谁引用,从而定位问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。