WWDC2016 session401的题目是 visual Debugging with xcode,意为 xcode的可视化调试,主要分为以下几部分内容:
- Runtime issues 11
- View debugging 12
- State machine Quick Looks 13
- SpriteKit/SceneKit FPS gauge 14
- Memory graph debugging 15
这里主要介绍 11 12 14 15
Runtime issues
下面这些图标大家应该都很熟悉,编译error warning analyze
现在新增了这个图标 Runtime issues
这个不是oc中的Runtime问题,而是指app运行过程中产生的issue。
例如,当多线程修改一个变量的时候会提示
而会提示这样错误的包括三个地方 UI,内存,线程,下面的内容是有关UI方面的。
view Debugging
先说说xcode上的变化,想必之前用过XIB都了解过,之前是sizeClass的,我可以在九宫格中选择如下图
在xcode 8上就变成以下图这样,可以任意选择可观的设备以及横竖屏,更加真实
除此之外,相比大家在调试的过程中都用过来查看当前页面的布局,层级关系如下如
以前可以通过title,类名,父类名来查找,现在可以通过控件的 地址 来查找,也可以根据类名跳转到相应的类,看下图
这块xcode8上不仅多了可以通过地址来查找,如果有约束冲突还会在runtime以及右侧中高亮显示,如下图
不仅仅这些另外快照速度也提高了70%比之前,对blur的支持也更完善。
Memory graph debugging
在 xcode 8上运行 iOS 10 以及以上的设备 会出现这个一个按钮,点击可以看到某一时刻内存中所有的class,点击class可以看出谁持有了这个类,如下列图中所示(这里假设只有一个根控制器FirstViewContrller从根控制器push过去添加SecondVC,并且设置SecondVC的block)
从图中可以看出FirstViewController的持有关系,利用这个当有循环引用的时候会很方便,如果查到是block或者timer引起的,点击右侧对应位置就可以跳到指定位置。例如下面这个例子,点击NSCFTimer,就能在右边直接点击,跳到对应位置如下图
另外,如果没有被释放,还会有提示内存泄露,在Runtime中
如果打开了malloc stack,还可以在右边看到选中的类的内存创建过程,如下图
SpriteKit/SceneKit FPS gauge
FPS 可以看到GPU和CPU的使用情况,方便我们去优化系统性能,突破一些瓶颈。如下图所示
可以在图中了解到 CPU 的占用率。
以上便是这次分享给大家的主要内容。这次在xcode调试上的改变,给我最大的感觉,就是人性化。
注:本博客由尹者倾情赞助联合开发完成。