Sur*_*gch 32 didreceivememorywarning ios swift
每当我创建一个新的View Controller子类时,Xcode都会自动添加该方法
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated
}
Run Code Online (Sandbox Code Playgroud)
通常我只是删除它或忽略它.这就是我所见过的所有教程.但我认为,因为Xcode每次都给我,所以它应该有点重要,对吧?我该怎么办?我假设处理资源意味着将它们设置为nil,但究竟什么是"可以重新创建的资源"?
我看过这些问题:
但他们都是斯威夫特之前.虽然我对Objective-C了解不多,但我听说内存管理不同.这对我应该做的事情didReceiveMemoryWarning有何影响?
其他说明:
didReceiveMemoryWarning,我发现这是相当短暂.Kev*_*vin 38
Swift像Objective-C一样使用ARC(源自Apple Docs).同样的规则适用于释放内存,删除对象的所有引用,它将被释放.
我假设处理资源意味着将它们设置为nil,但究竟什么是"可以重新创建的资源"?
"可以重新创建的资源"实际上取决于您的应用程序.
假设您是一个处理大量图片的社交媒体应用.您需要一个快速的用户界面,以便在内存中缓存接下来的20张图片以快速滚动.这些图像始终保存在本地文件系统中.
您正在创建一个具有多个不同级别的精彩游戏.将等级加载到您喜欢的游戏引擎需要一段时间,因此如果用户有足够的内存,您可以在玩2级时加载等级3.
LevelCache.sharedCache().nextLevel = nil 释放所有的记忆永远不要释放屏幕上的东西.我已经看到相关问题的一些答案解除了UIViewController的视图.如果你从屏幕上移除所有东西,你可能会崩溃(在我看来).
如果用户打开了一个他们正在编辑的文档,请不要取消分配.如果您的应用删除了他们的工作而没有得到保存,用户将非常生气.(事实上,你可能应该有一些紧急保存机制,以便何时发生)
如果您的用户正在为您精彩的社交媒体应用撰写帖子,请不要让他们的工作浪费掉.保存并尝试在再次打开应用程序时恢复它.虽然设置很多我喜欢这样做的应用程序.
大多数现代设备很少耗尽内存.该系统在后台杀死应用程序非常出色,可以为前台运行的应用程序释放内存.您可能已经在应用程序切换器中看到了一个应用程序"打开",但当您点击应用程序时,它已打开到其初始状态.操作系统在后台杀死了应用程序以释放内存.有关如何避免此问题的信息,请参阅状态恢复.
如果您的应用程序在没有进行大量处理时获得一致的内存警告,请确保您没有先泄漏内存.检测内存泄漏超出了本答案的范围.文档和教程.
当didReceiveMemoryWarning被调用时,这意味着您的应用程序使用了太多内存(与设备内存相比),您应该release any additional memory used by your view controller减少应用程序的内存。如果内存应用程序超出了设备的内存,iOS 将立即终止您的应用程序。“可以重新创建的资源”意味着您可以在某个地方再次重新创建它,您现在不需要它们(不需要将它们放入内存中)。并且可以在 get 时释放它didReceiveMemoryWarning。
这是另一个详细主题:ios app最大内存预算
| 归档时间: |
|
| 查看次数: |
11419 次 |
| 最近记录: |