我有一个Swift 2.3应用程序被20个人通过TestFlight使用。它是另一款热门应用的配套应用,因此用户经常在两者之间切换。他们使用主应用程序,然后切换到我的应用程序。
人们抱怨的一个问题是,当他们切换到我的应用程序并切换回主应用程序时,主应用程序必须完全重启,这可能需要几分钟。他们声称其他应用程序不会导致主应用程序像这样关闭,并希望我修复"我的应用程序,因此它不会强制重新启动其他应用程序。
我是iOS开发的新手,所以这有点令人费解。我的应用程序的某些方面会强制其他应用程序终止吗?电池耗电量太大了?别的什么?有没有办法测试这个或一个指标,以减少这种情况发生的可能性?
答案 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
}
检查记忆报告:
有时当您执行操作时,例如按某个按钮,您会看到内存使用量明显增加,并且在几秒钟后它不会下降。那可能是泄漏。
此外,如果单击“仪器中的配置文件”,您将在使用应用程序时获得详细报告,了解哪个进程占用的内存量。
根据我的经验,内存泄漏的发生主要是因为关闭:
//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