使用工具检测你的应用程序:模拟器和真机测试之二


工具主要有以下3种:

  • 基本工具,不需要Xcode instruments。

  • 内存工具,验证内存使用的正确性和测试内存使用的效率。

  • 性能工具,测试你程序的每一个部分运行有多快以及精确的定位任何瓶颈。



在本部分,我讨论的是在代码块中使用日志作为一个基本的工具来测试运行的时间。



基本工具其中之一就是用日志来记录代码块开始和结束的时间。通常,记日志是用NSLog来实现的。使用这个基本的工具,开发者能够检测每行代码或代码块运行的时间。


例如,运行下面的代码块




返回的结果:


time:0.0123(秒为单位)


优点:

  • 简单直接。

  • 你可以测试每一行代码或每一个代码块的性能


缺点:

  • 你无法测试UI性能(例如,渲染UI线程的时间)。

  • 可能会过度优化(为了一点点的优化,而花费太多时间再一个特定的代码块中)。

  • 在模拟器上运行通常比较快,在这个比较快的级别上,NSLog不能帮助你区分运行时性能的不同。尽管NSLog在真机上运行比较慢,但是它能够帮你检测到运行时性能的不同。


使用时机:

  • 当你需要一个马上就可以用的工具来测试,而没有太多的准备。

  • 当你需要一个工具能够快速的返回结果。

  • 当你需要一个独立的小代码块来验证预期的性能。



关于内存的问题,你只有一个主要要关注的方面:高内存使用。在旧的代码中有两个要关注的:内存泄露和内存回收。对于新的项目,你可以直接使用新的自动引用计数(ARC)。对于旧的项目,你可以使用控制工具对他们进行转换。


但是,不是每一个项目都是可以转的,有很多问题和内存管理策略阻止你进行转换。如果尝试遵从新的管理策略可能会导致更多的麻烦。因此,我主要讨论对象分配的内存工具,简单的介绍内存泄露和内存回收的工具。



注意:我这里介绍的所有内存工具都可以运行在模拟器上。使用模拟器的好处是它运行比较快,安装app也比较迅速。但是,要小心!我强烈建议你同样要在真机上测试你的app,因为模拟器和真机是不同的。他们编译不同,架构也不同。




内存分配能够帮助你理解你到底分配了多少对象。这意味着在内存中分配和保持了很多对象。这些对象没有释放,因为他们正在使用。



选择 Product  ->  Profile  然后在打开的窗口(如图 2-1)中选择 Allocations


使用工具检测你的app:模拟器和真机测试 之二


在选择Allocations instrument之后,你会看到一个Allocation 面板,向你展示了所有必要的信息,如图2-2 。


在Allocations 面板(图2-2)显示了“created and still living”jobs,这样就能够什么对象还在内存中,以及什么对象消耗了大部分的内存。如果你从iOS环境中收到内存警告,”,你应该使用这个工具。


这些细节想你展示了何时,哪一行代码,哪一个类负责创建和处理对象。有了这些信息,你能非常简单的处理内存问题。这是一个非常好的工具来跟踪缓存算法和方法(查看第4张了解更多细节)。


使用工具检测你的app:模拟器和真机测试 之二


图2-3和2-4显示了更多细节,什么对象还存活着,什么对象消耗了你应用的大部分内存。在图2-3中,你可以看到在你的应用中,对象创建和存活的细节列表。


使用工具检测你的app:模拟器和真机测试 之二

在图2-4中,你可以看到创建这些对象调用的方法。


使用工具检测你的app:模拟器和真机测试 之二

使用工具检测你的应用程序:模拟器和真机测试之二