Tag: xcode instruments

使用Xcode Instruments诊断和解决性能问题

我们将创建一个简单的iOS应用程序,该应用程序在表视图中使用名称和头像来显示模拟动物列表。 阿凡达图片存储在我们的应用程序捆绑包中。 为了使应用程序表现得更真实,我们将实时分别加载化身图像,而不是使用imageNamed:方法预加载化身图像。 我们可以假设瓶颈是图像加载。 我们正在从闪存驱动器中实时加载图像,而不是对其进行缓存。 所以这可能就是为什么它很慢吧? 可以使用一些很棒的代码来修复该问题,这些代码将使用GCD异步地推测性加载我们的图像,然后对其进行缓存。 在开始编写代码之前,让我们测试一下我们的假设。 让我们使用仪器工具来分析应用,以识别问题。 首先,我们对工具感兴趣,例如: Time Profiler:用于测量CPU使用率,按方法/功能细分。 核心动画:用于调试各种核心动画性能问题。 时间分析器 Time Profiler是用于监视CPU使用率的工具。 它使我们可以了解应用程序中哪些方法消耗最多的CPU时间。 高CPU使用率并不总是您应该意识到的-您最可能希望动画例程非常占用CPU,因为动画往往是iOS设备上最苛刻的任务之一。 如果您遇到性能问题,那么查看CPU时间是确定性能是否受CPU限制以及哪些方法需要优化的好方法。 核心动画 核心动画工具用于监视核心动画性能。 它给出了定期采样的FPS的细分,并考虑了发生在我们应用程序之外的部分动画。 核心动画工具还提供了许多调试选项,以帮助调试渲染瓶颈。 我们对选项感兴趣,例如: 颜色混合层:此选项突出显示正在发生混合的屏幕的任何区域,根据严重程度从绿色变为红色。 混合不利于GPU性能。 它会导致透支,并且是滚动或动画帧速不佳的常见原因。 颜色 shouldRasterize 绿色, shouldRasterize 红色:使用shouldRasterize属性时,将缓存昂贵的图层图形并将其渲染为单个展平的图像。 当必须重新生成缓存时,此选项以红色突出显示栅格化的图层。 如果频繁重新生成缓存,则表明光栅化可能会对性能产生负面影响。 屏幕外渲染的颜色为黄色:以黄色突出显示需要屏幕外渲染的任何层。 这些层可能是使用诸如shadowPath或shouldRasterize优化的候选shouldRasterize 。 我们的考虑可以归结为这种问题可能与图像加载有关的想法,所以让我们从Time Profiler工具开始。 在tableView: cellForRowAtIndexPath:方法(这是我们加载图像)中花费的CPU时间的总百分比仅为6%。 那真的不是那么高。 这可能是一个建议,说明CPU / IO不是此处的限制因素。 让我们看看这是否是GPU问题。 我们将检查GPU利用率。 GPU的平均硬件利用率约为72%。 看起来GPU不得不非常努力地渲染动物列表。 为什么GPU使用率如此之高? 让我们使用“核心动画”工具的调试选项检查屏幕。 首先,启用“ 颜色混合图层”选项。 屏幕上所有的红色表示文本标签上的混合水平很高,这并不奇怪,因为我们必须使背景透明才能应用阴影效果。 这就解释了为什么渲染器利用率如此之高。 […]

新的使用XCode仪器来解释iPhone开发的内存警告,需要指导

我正在做一个iPhone游戏,接收内存警告,我没有足够的经验来解释。 我一直在看一些iTunesU的教程,但我还是不是很擅长这个.. 在运行我的游戏时,我收到了各种内存泄漏,我想了解如何正确解释仪器中的堆栈跟踪显示。 附上ObjectAllocation仪器输出的截图 。 即使我缩放filter,我不设法过滤ObjectSummary中的数据 。 当GameScene被初始化并且所有数据被加载(ParallaxBackground,CCSpriteBatchNode)以及Sprite和子弹框被创build(在SpriteFrame的CCArray中)时, 1中的内存使用峰值发生。 大的蓝色峰值只是在加载时间,但应用程序冻结,然后崩溃后一段时间,从图中我看到内存使用(蓝色条)已经下降..所以我不安静得到这一点。 此外,当我尝试使用泄漏仪器的应用程序崩溃.. 我知道对于有经验的人来说这是一个非常愚蠢的问题,但是我只需要一些额外的帮助就可以开始使用这个工具集。 我认为内存问题是由于我分配的精灵caching类中的精灵,但我不确定这一点,因此想要调查这使用仪器,但无法find如何看到什么是造成内存警告的对象和如何访问堆栈跟踪 PS:我正在使用iPod第四代,我使用Cocos2D作为库 编辑:我也不明白为什么如果活字节只有1.01 MB的应用程序崩溃,为什么我仍然收到内存警告(见黑旗)。 这是由于某些指针引用某个空variables或由于内存分配过多? 1.01 MB对我来说不太好 编辑2:遵循Marion的build议,我使用活动监视器,并意识到有效的实际内存使用量是55.39 MB。 我误解了“活字节”这个词。 我会试着进一步深入研究这个问题,并且会让现在的问题不被接受,从而让其他人做出贡献。 如果在两天之内我不会有任何其他答案,我会标记为接受当前的答案。 谢谢! 非常感谢!

如何find并解决崩溃的原因

我向应用程序商店提交了一个应用程序,因为: “我们发现你的应用程序在运行iOS 6.1.2的iPhone 5上崩溃,这不符合App Store评论指南。 我们的应用程序崩溃了: 当用户点击login到应用程序时,会产生崩溃。 这发生在您的应用程序被使用时: 在Wi-Fi上 在蜂窝networking上 如果使用的内存太多,您的应用程序可能会遇到此问题。 要了解有关iOS内存使用情况以及如何跟踪内存使用情况和泄漏情况的更多信息,请参阅“内存使用性能指南”。 我无法在我身边再次触发崩溃。 我使用分配工具来分析我的应用程序,并看到我的活动字节从未超过12MB。 泄漏仪器,我发现我有一些泄漏(都在第三方来源),但他们是非常小的,不应该有应用程序崩溃..我不知道该怎么做.. 由于使用太多的内存,应用程序真的崩溃了吗? 会有另一个原因吗? 我应该如何解决这个问题并解决问题? 编辑 – 附上崩溃日志 看看这个 &看起来好像使用ASIHTTPRequest框架导致崩溃一些如何,但只能在临时或分布构build,这使得debugging更令人头疼。 这是真的吗? 我应该改用AFNetworking吗?

UIAutomation无法加载插件

我有一个项目build立,以便当构build过程完成时,目标之一启动UIAutomation。 仪器从Python脚本启动,最终在bash上调用通常的“xcrun instruments …”命令。 它工作了一段时间没有问题。 将Xcode升级到4.4后,我开始看到“无法加载XXX定位器插件”。 错误信息。 任何想法在哪里开始追踪问题? 任何线索都会有帮助! 提前致谢。

iOS的CPUconfiguration文件:为什么这个线程可以吮吸99.9%的CPU?

有时,当我加载一个表视图,并且除了让表视图显示之外,我没有任何活动,我会等待几秒钟,然后我的CPU使用率上升。 我怎样才能find原因?

在设备上运行时,Xcode Instruments无法拍摄泄漏的快照

最近,我还无法在设备上运行应用程序时使用仪器进行泄漏testing。 仪器将尝试拍摄快照,但状态会在“分析过程”中冻结。 起初我以为是花时间,但我已经等了20多分钟,没有运气。 它仍然在模拟器上正常工作。 到目前为止,我已经尝试: – 使用其他设备与不同的ios版本 – 重新启动所有设备 – 更新Xcode到最新版本 – 运行多个不同的应用程序 – closures自动快照并尝试手动 不幸的是,上面没有任何改变,如果可能的话,除了重新安装仪器之外,我正在用尽想法。 有没有人有什么可能会导致这个问题的想法?

仪器自动化工具:脚本结束没有明确地closures此testing

我今天正在玩乐器上的自动化工具,但在编写testing工作时遇到了问题。 以下示例将以问题退出Issue: Script ended without explicting closing this test 。 是的,这个消息确实说明了 。 我认为这是Xcode最近版本中引入的一个错字。 这是我第一次尝试使用这个工具。 将cellCount设置为6会导致Pass,但是任何东西都会给我“脚本结束”消息。 我在做错了吗?还是自动化工具有一个错误。 UIALogger.logStart("Start Simple Test"); var target = UIATarget.localTarget(); var cellCount = 7; UIALogger.logMessage("cell count: " + cellCount); if (cellCount != 6) { UIALogger.logFail("Failed"); } UIALogger.logPass("Passed");

为什么在UI Automation工具中看到“尝试运行脚本时发生错误”?

当我尝试在iOS 5设备上运行UI自动化脚本时,出现以下错误: “尝试运行脚本时发生错误。” 相同的脚本在模拟器或iOS 4.3.3设备上运行完美。 我怎么解决这个问题?

在乐器中寻找内存泄漏线

我是iOS新手。 我试图find仪器中的内存泄漏,并使用Xcode 4.5.2和本教程: http : //soulwithmobiletechnology.blogspot.sg/2011/04/how-to-check-memory-leaks-in-xcode-4 .html 。 我能够find内存泄漏,并能够按箭头去内存泄漏项目的历史。 但是,当我双击其中任何一个,它不显示它是造成内存泄漏的行。 图像是这样的: 我究竟做错了什么? 需要一些指导…谢谢..

使用仪器命令行实用程序启动特定硬件版本的iOS模拟器

我正在使用Apple提供的UIAutomation – > Xcode – > instruments。 我有我的Javascript和使用仪器命令行基础设施运行的整个自动化。 为了提供更好的覆盖范围,我还在以前版本的模拟器(iOS 6.0,5.1,5.0,4.3.2)上运行了自动化操作。 但我不知道一种方式来指定哪个版本的iOS模拟器可供select。 默认情况下,它总是selectlates iOS模拟器。 我已经尝试了以下的东西: 指定模拟器保存的path,其中包含模拟器的版本path。 制作自定义自动化模板跟踪并尝试使用它。 使用默认写入com.apple.simulator实用程序更改了iOS模拟器的默认版本。