【问题标题】:User Interface Freezes While Loading and App Crashes Frequently加载时用户界面冻结,应用程序经常崩溃
【发布时间】:2013-02-23 07:03:50
【问题描述】:

我的应用几乎已完成开发。该应用程序在随机点退出,并且用户界面冻结/加载非常缓慢。该应用程序是在没有 ARC 的情况下制作的,我刚刚开始使用 Xcode Instruments 来解决内存问题。我正在考虑将整个项目转移到 ARC,但不知道这是否会有所帮助。此外,Instruments Allocations 处理的许多进程似乎并没有占用太多内存。

我需要找出提高应用效率的最佳方法。我对该领域知之甚少,并且阅读了各种关于如何做某些事情以提高效率的教程,我只是不知道从哪里开始。我应该转换为 ARC 吗?我应该专注于使用 Xcode 中的分配/泄漏/配置文件吗?我知道它可能特定于我的应用程序,我只是不知道从哪里开始。任何一般性的建议都会很棒!谢谢大家!

【问题讨论】:

  • ARC 不会加快任何速度。对于真正响应式的界面,您应该将处理移到后台。
  • 所以我应该创建自定义方法,而不是在 viewdidappear 和 viewdidload 中调用我的 JSON 提要/其他进程?
  • 不止于此。苹果让后台处理变得微不足道。您可以在低端使用 GCD,在高端使用 NSThread 和 NSOperation。困难的部分是选择你想要实现的(或混合使用,只需记住标准的线程资源访问规则)。
  • 嗨@Brandon,可以在应用退出时发布日志消息。如果应用程序没有发布任何日志消息并退出,则可能是内存泄漏,请复制项目并将其转换为 ARC 并重试。
  • 谢谢大家,看起来这比预期的要复杂一些。我有很多在 viewdidload 和 viewdidappear 中被调用的网络电话。我没有做任何特别的事情来使这些“异步”我认为这会导致缺乏响应能力。

标签: iphone ios objective-c


【解决方案1】:

更改为 ARC 并不能帮助您,而是将重点放在分配/泄漏上。如果一次又一次地做某事,也要尝试优化你的代码。此外,如果您使用同步 Web 服务调用,它也会冻结应用程序。

【讨论】:

  • 谢谢。是否有一种标准方法可以使同步 Web 服务调用异步?还是我只需要研究一下?
  • 对于异步 Web 请求,我建议使用 AFNetworking。然而,这个项目需要 ARC 才能工作。
【解决方案2】:

如果您的应用程序不是很大,我建议您将项目移至 ARC。使用 ARC 解决了许多开发人员在内存方面的错误。

既然有了 ARC,为什么不使用它呢?

另一件事是,如果有需要时间的过程。在后台线程中执行它们。

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2018-05-04
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多