原文连接:http://www.jianshu.com/p/f4adce56166fios
在过去几年间,移动应用以雷霆之势席卷全球。咱们在工做和休闲时间中使用互联网的方式,已经随着移动应用的前进脚步发生了变革。在开发应用的时候,人们也开始考虑“移动优先”的作法。咱们正在面对全新一代的移动设备,诸如可穿戴设备或众多移动配件——正是它们构成了“万物互联”的世界。咱们将面对全新的用户界面,经过它们数据展现及指令接收处理。同时,咱们还将看到,愈来愈多的公司将真正地践行“移动优先”的思路。而在将来数年中,这一切都将影响咱们设计、开发和测试软件的方式。数据库
把一个客户端作得稳定、无奔溃、流畅,是写客户端朋友的梦想,可是,咱们面临的结果每每是不如人意的。天下武功,惟快不破。不少公司都信奉这个教条。巴不得把app开发周期压缩到最低,这就致使了开发中隐藏了不少问题。有点经验的工程师草率的优化一下,更糟的状况是那些没有经验的工程师甚至不会对app进行任何优化,这将会使状况变的更糟。xcode
十年前,移动设备的硬件资源是很是有限的.甚至连浮点数都是被禁止的.由于浮点数能致使计算的速度变慢。科技发展如此迅速的今天,硬件很大程度上能够弥补软件的短板。可是硬件的进步终究没法掩饰软件的不足,这也是写这篇文章的初心。缓存
在程序开发中,测试是必不可少的。移动端测试按大的类型划分能够分为白盒测试和黑盒测试。服务器
白盒测试通常是由开发人员使用编码的方式进行。测试者须要接触程序的内部代码;而黑盒测试能够在不知道程序内部结构和代码的状况下进行。微信
下面是主要的测试流程了:
冒烟测试:在软件测试中,冒烟测试是指快速验证APP的主要功能(例如:微信的登录、退出、发消息等功能) 。若是没有发现问题,再进行更加深刻的测试工做;若是发现有问题,就说明APP有重大缺陷。网络
功能测试:功能测试也叫行为测试,须要根据测试用例来验证应用预期的功能有没有实现。app
自由探索式测试:尝试边界条件、输入特殊符号、异常网络环境、忽然中断程序等操做 。功能测试的目的是验证正常的功能有没有实现,而自由探索测试的目的就是为了试试应用在极端的操做下会不会出现问题。探索式测试就是要找到能让应用出错的操做。框架
回归测试:对以前使用咱们的服务测试过的应用,将案例复测一遍。ide
移动端关注的一些指标
运行多少小时不崩溃;
屡次打开页面,控制崩溃率;
界面优化,如何才能让用户不急躁、不烦躁;
服务器没有返回数据,是否会致使奔溃;
网络很差,数据来的太慢,界面是否不流畅;
从数据库读的数据太慢如何解决等。
移动端界面应该有本身的逻辑,须要网络数据的地方,应该有默认值,这样在网络数据没有返回的状况下,让用户有数据能够看到。收到的网络数据应该是经过某种方式刷新到界面,而不是等到数据返回才刷新页面。当没有网络数据的时候,界面应该能够自成一体,走的通流程,不强依赖网络数据。
在弱网模式下调试是咱们必备的功力,由于咱们要考虑用户的实施环境一般都不会很好。把常用的数据,存到缓存,提升APP的运行效率、界面流程度。同时,咱们须要具有收集奔溃日志的功能,这样才能更好的减小崩溃,提升用户体验。
iOS界面处理是在主线程下进行的,系统图形服务经过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,好比视图的建立、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换、合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区去,等待下一次刷新信号到来时显示到屏幕上。显示器一般以固定频率进行刷新,若是在一个刷新时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留以前的内容不变。这就是界面卡顿的缘由。CPU 和 GPU 不论哪一个阻碍了显示流程,都会形成掉帧现象。
CPU 形成的资源消耗有如下几种:
GPU 资源消耗有下面几种状况:
具体能够参考这篇文章
时间事件查看器-Time Profiler
在xcode的菜单中选择 product->Profile
咱们会看到下面的界面:
点击Time Profiler进入。
下面咱们来深究以下的控制面板:
如下介绍下配置选项:
找到Detail面板里最耗时的进程,点击进去能够看到代码,观察是否有异,如此即可逐步优化应用的运行效果了。
修改好后,在仪器从新运行该应用程序Product—Profile(或⌘I-记住,这些快捷键真的会为您节省一些时间)。
分配工具
这个时候你会发现两个曲目。一个叫(分配)Allocations,以及一个被称为VM Tracker(虚拟机跟踪)。
内存泄漏有两种泄漏。第一个是真正的内存泄漏,一个对象还没有被释放,可是再也不被引用的了。所以,存储器不能被从新使用。第二类泄漏是比较麻烦一些。这就是所谓的“无界内存增加”。这发生在内存继续分配,并永远不会有机会被释放。若是永远这样下去你的程序占用的内存会无限大,当超过必定内存的话 会被系统的看门狗给kill掉。
内存警告是ios处理app最好的方式,尤为是在内存愈来愈吃紧的时候,你须要清除一些内存。内存一直增加其实也不必定是你的代码出了问题,也有多是UIKit 系统框架自己致使的。
本身动手观察下,一切天然明了。
内存泄露
这一类泄漏是前面提到的 - 当一个对象再也不被引用时出现的那种,检测泄漏能够理解为一个很复杂的事情,但泄漏的工具记得已分配的全部对象,经过按期扫描每一个对象以肯定是否有任何不能从任何其余对象访问的。
关闭仪器,回到Xcode和选择Product->Profile
点击进入,运行:
本身动手尝试下,找到右边面板里,若是有黑色标识的方法,进入看看。学习就是多尝试。
篇幅有限,更多的内容咱们下次再聊。