工具
工具主要有以下3种:
基本工具,不需要Xcode instruments。
内存工具,验证内存使用的正确性和测试内存使用的效率。
性能工具,测试你程序的每一个部分运行有多快以及精确的定位任何瓶颈。
基本工具
在本部分,我讨论的是在代码块中使用日志作为一个基本的工具来测试运行的时间。
用日志记录运行的时间
基本工具其中之一就是用日志来记录代码块开始和结束的时间。通常,记日志是用NSLog来实现的。使用这个基本的工具,开发者能够检测每行代码或代码块运行的时间。
例如,运行下面的代码块
NSDate *date1 = [NSDate date];
for (int i = 0; i < 1000; i++) {
// Do calculation here
}
NSDate *date2 = [NSDate date];
NSLog (@”time: %f”, [date2 timeIntervalSinceDate:date1]);
返回的结果:
time:0.0123(秒为单位)
优点:
简单直接。
你可以测试每一行代码或每一个代码块的性能
缺点:
你无法测试UI性能(例如,渲染UI线程的时间)。
可能会过度优化(为了一点点的优化,而花费太多时间再一个特定的代码块中)。
在模拟器上运行通常比较快,在这个比较快的级别上,NSLog不能帮助你区分运行时性能的不同。尽管NSLog在真机上运行比较慢,但是它能够帮你检测到运行时性能的不同。
使用时机:
当你需要一个马上就可以用的工具来测试,而没有太多的准备。
当你需要一个工具能够快速的返回结果。
当你需要一个独立的小代码块来验证预期的性能。
内存工具
关于内存的问题,你只有一个主要要关注的方面:高内存使用。在旧的代码中有两个要关注的:内存泄露和内存回收。对于新的项目,你可以直接使用新的自动引用计数(ARC)。对于旧的项目,你可以使用控制工具对他们进行转换。
但是,不是每一个项目都是可以转的,有很多问题和内存管理策略阻止你进行转换。如果尝试遵从新的管理策略可能会导致更多的麻烦。因此,我主要讨论对象分配的内存工具,简单的介绍内存泄露和内存回收的工具。
注意:我这里介绍的所有内存工具都可以运行在模拟器上。使用模拟器的好处是它运行比较快,安装app也比较迅速。但是,要小心!我强烈建议你同样要在真机上测试你的app,因为模拟器和真机是不同的。他们编译不同,架构也不同。 |
内存分配
内存分配能够帮助你理解你到底分配了多少对象。这意味着在内存中分配和保持了很多对象。这些对象没有释放,因为他们正在使用。
Allocation
选择 Product -> Profile 然后在打开的窗口(如图 2-1)中选择 Allocations
在选择Allocations instrument之后,你会看到一个Allocation 面板,向你展示了所有必要的信息,如图2-2 。
在Allocations 面板(图2-2)显示了“created and still living”jobs,这样就能够什么对象还在内存中,以及什么对象消耗了大部分的内存。如果你从iOS环境中收到内存警告,例如“Received memory warning. Level =1 ”,你应该使用这个工具。
这些细节想你展示了何时,哪一行代码,哪一个类负责创建和处理对象。有了这些信息,你能非常简单的处理内存问题。这是一个非常好的工具来跟踪缓存算法和方法(查看第4张了解更多细节)。
图2-3和2-4显示了更多细节,什么对象还存活着,什么对象消耗了你应用的大部分内存。在图2-3中,你可以看到在你的应用中,对象创建和存活的细节列表。
在图2-4中,你可以看到创建这些对象调用的方法。
优点:
在应用消耗大部分内存时,你能够正确的提供很多细节。
它同样可以给你提供应用中对象生命周期的一个概要。
缺点:
结果依赖于开发者如何运行app。它需要一个好的测试用例来尽可能多的覆盖各种可能性。
它可能会花很多时间和精力来创建一个好的测试用例来帮助开发者找出应用消耗大部分内存的时间和地方。
你需要在真机上测试,这样你才能收到内存警告的信息。模拟器几乎不会收到内存警告信息。这是因为模拟器会使用电脑的RAM,而电脑一般会有2-4GB的RAM,但是你的设备就很少了。
使用时机
如果你在真机上测试收到了内存警告消息,这应该是你第一个应该使用的工具。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。