【问题标题】:Users claim iOS app causing other iOS app to switch off? Is that a thing?用户声称 iOS 应用程序导致其他 iOS 应用程序关闭?那是一回事吗?
【发布时间】:2017-01-25 23:20:54
【问题描述】:

我有一个 Swift 2.3 应用程序,有 20 人通过 TestFlight 使用。它是另一个流行应用程序的配套应用程序,因此用户经常在两者之间切换。他们使用主应用程序一会儿,然后切换到我的应用程序。

人们抱怨的一个问题是,当他们切换到我的应用并切换回主应用时,主应用必须完全重启,这可能需要几分钟。他们声称其他应用不会导致主应用像这样关闭,并希望我“修复”我的应用,这样它就不会强制重启其他应用。

我是 iOS 开发新手,所以这有点令人费解。我的应用程序的某些方面会迫使其他应用程序终止吗?电池消耗过多?还有什么?有没有办法对此进行测试,或者有一个旨在降低这种情况发生可能性的指标?

【问题讨论】:

  • 在不知道应用程序做什么的情况下,它可能只是导致问题的任何原因。
  • 它也可能是您的伴侣。
  • 该应用程序与 6+ iphone 上的小 RAM 相结合,我总是很早就得到这个

标签: ios iphone power-management


【解决方案1】:

这可能是内存泄漏。

在 AppDelegate 中添加这个:

func applicationDidReceiveMemoryWarning(application: UIApplication) {
    //Print and send to analytics
}

检查这个问题:How to implement didReceiveMemoryWarning in Swift?

然后将其添加到所有视图控制器中:

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    //Print and send to analytics
    //Dispose of any resources that can be recreated
}

检查内存报告:

有时当您执行某个操作时,例如按下某个按钮,您会看到内存使用量明显上升,并且在几秒钟后不会下降。那应该是泄密了。

此外,如果单击“仪器中的配置文件”,您将在使用应用程序时获得有关哪个进程占用了多少内存的详细报告。

根据我的经验,内存泄漏的发生主要是因为闭包:

    //Leaks memory
    ez.runThisAfterDelay(seconds: 2) {
        self.doSomething()
    }

    //Doesn't leak memory
    ez.runThisAfterDelay(seconds: 2) { [weak self] () -> () in
        self?.doSomething()
    }

关于闭包内存泄漏的一些来源:

Shall we always use [unowned self] inside closure in Swift

http://blog.stablekernel.com/how-to-prevent-memory-leaks-in-swift-closures

【讨论】:

    【解决方案2】:

    内存过多。这是主要原因。您的应用可能会消耗过多内存,因此 iOS 必须终止任何其他暂停的应用,以在用户尝试返回时强制重新启动任何其他应用。

    使用 Instruments 并分析您的应用以查找和修复任何内存问题。

    【讨论】:

    • 没错,这取决于哪个 iphone 型号,当他们没有足够的内存时,这很早(当前内存隐藏在苹果网站的 iphone 规格中),但请参阅此处 iPhone6iPhone6S .在 6+ 版本上,由于屏幕更大,我总是重启后台应用程序 :( 我现在对 6S+ 很满意,因为它已经消失了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2017-06-07
    • 2012-11-25
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多