Ios 应用程序冻结,但CPU使用率随时间增加

Ios 应用程序冻结,但CPU使用率随时间增加,ios,iphone,ipad,xcode-instruments,Ios,Iphone,Ipad,Xcode Instruments,我已经在这件事上纠缠了好几个小时了,我不知道还能找什么 由于调试器不显示任何错误,但它是可复制的,所以我无法提供太多的信息——我点击表视图中的一个非常特定的项,其行为应该忽略该模式,然后我的应用程序冻结。表视图中的其他项不会出现这种情况——模式会完全取消,应用程序会继续运行 但我怀疑这是一个僵局: 每次我在调试器中点击暂停按钮,主线程都会执行不同的操作 从Xcode的调试导航器中可以看出,CPU使用率随着时间的推移而增加 我将断点放在自定义UIControl的一个layoutSubviews方

我已经在这件事上纠缠了好几个小时了,我不知道还能找什么

由于调试器不显示任何错误,但它是可复制的,所以我无法提供太多的信息——我点击表视图中的一个非常特定的项,其行为应该忽略该模式,然后我的应用程序冻结。表视图中的其他项不会出现这种情况——模式会完全取消,应用程序会继续运行

但我怀疑这是一个僵局:

  • 每次我在调试器中点击暂停按钮,主线程都会执行不同的操作
  • 从Xcode的调试导航器中可以看出,CPU使用率随着时间的推移而增加
  • 我将断点放在自定义UIControl的一个
    layoutSubviews
    方法上,它不断被调用。它不调用
    [super layoutSubviews]
    ,也不对任何人调用
    setNeedsLayout
    ,只设置其子视图的帧,因为我没有使用自动布局
我如何调试这个东西?我一直在寻找Xcode仪器,但我无法理解我看到的数据。具体来说,系统跟踪模板似乎能够在冻结发生时立即停止,而其他模板则保持记录


补充:我在System Trace

Instruments中看到的是您想要诊断问题的工具。尝试使用
Time Profiler
检查您的应用程序,执行您观察到的任务以提高CPU使用率,然后分析结果,检查
反转调用树
隐藏系统库
。如果要检查特定的时间段,还可以设置时间标记。从这里,您可以看到什么调用占用了CPU。

@Paulw11的评论很有帮助——时间分析器模板比系统跟踪工具更适合此任务

我使用时间分析器,并得到一组指向UINavigationBar的跟踪,作为我自定义UIControl的
布局子视图的可疑重复调用方。要进一步解释我的视图层次结构,请执行以下操作:

  • 我的“主页”视图控制器的UINavigationItem中有一个自定义标题视图
  • 自定义标题视图是点击时启动模式的自定义UIControl
交易如下:如果我
alloc initWithFrame
我的自定义
UIControl
带有
CGRectZero
帧,应用程序将冻结。如果我像
CGRectMake(0,0,10,10)
那样向帧提供垃圾初始值(由于UINavigationBar重塑了我的自定义UIControl,因此无论如何都会忽略该值),崩溃不会发生

我猜UINavigationBar对于如何布局初始帧为
(0,0,0,0)
的自定义标题视图感到困惑。听起来像苹果虫


注意:我在iOS 8.2上运行。

点击该单元格后,是否检查递归方法调用。添加一些编解码器,然后确认您没有从后台线程操作UI?在所有情况下都不会在主线程上调用DidSelectRowatineXpath()@kenleycapps不,DidSelectRowatineXpath没有在后台线程中运行。它在主线程上运行,没有调度异步。时间分析器工具可能更有用。选择“反转调用树”和“隐藏系统库”并查看其显示内容