我在我的应用中添加了新的数据加载功能。它意味着将大型数据库的内容从移动设备传输和处理到后端。在我在这个管道中运行的函数中,函数的全部内容都在
中dispatch_async
这将调度到非主线程。我还验证了这些正在运行的日志。管道中的每个功能都不在主线程中。然而,我正在经历用户界面冻结。
问题:
答案 0 :(得分:4)
您应该使用乐器配置您的应用。 Time Profiler(确保使用“Record Waiting Threads”选项)可能很有用,系统跟踪也是如此。对于这两者,您可能希望使用“线程策略”视图,重点关注主线程。有一堆WWDC视频描述了各种方法,包括过时的,但仍然相关的2012年视频Building Concurrent User Interfaces on iOS。还要寻找引用“分析”和“乐器”的较新的WWDC视频。
对于非主线程对性能产生负面影响,它通常可以忽略不计,您可能还有其他事情要发生。唯一一次这是一个重大问题是当你使用一个不支持多线程的非常旧的设备时。
顺便问一下,您是否100%确定主线程确实没有响应?或者您可能没有及时看到UI更新?这可能是因为意外地从后台线程进行UI更新而不是将它们分派回主队列。
如果您需要更具体的建议,我们需要reproducible example性能问题。但在摘要中,
答案 1 :(得分:0)
我会使用这些工具,你可以使用很多工具,例如Time Profiler,Allocations,System Usage等。要打开工具,请在xcode或Xcode中使用命令+ i>打开开发人员工具>工具在xcode菜单中。