用户声称iOS应用会导致其他iOS应用关闭?那是一件事吗?

时间:2017-01-25 23:20:55

标签: ios iphone power-management

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

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

我是iOS开发的新手,所以这有点令人费解。我的应用程序的某些方面会强制其他应用程序终止吗?电池耗电量太大了?别的什么?有没有办法测试这个或一个指标,以减少这种情况发生的可能性?

2 个答案:

答案 0 :(得分:2)

记忆太多了。这是主要原因。您的应用程序可能消耗了太多内存,因此iOS必须杀死任何其他已暂停的应用程序,强制在用户尝试返回时启动任何其他应用程序。

使用工具和个人资料来查找和修复任何内存问题。

答案 1 :(得分:1)

这可能是内存泄漏。

在AppDelegate中添加:

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

请检查此问题:How to implement didReceiveMemoryWarning in Swift?

然后将其添加到所有View Controller:

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

检查记忆报告:

有时当您执行操作时,例如按某个按钮,您会看到内存使用量明显增加,并且在几秒钟后它不会下降。那可能是泄漏。

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

enter image description here

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

    //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