Swift
Swift 使用 ARC 就像 Objective-C 一样(Apple 文档的来源 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)。相同类型的规则适用于释放内存,删除对对象的所有引用,并且该对象将被释放。
如何释放内存
我认为处置资源意味着将它们设置为零,但是“可以重新创建的资源”到底是什么?
“可以重新创建的资源”实际上取决于您的应用程序。
Examples
假设您是一个处理大量图片的社交媒体应用程序。您想要一个活泼的用户界面,因此您将接下来的 20 张图片缓存在内存中,以便快速滚动。这些图像始终保存在本地文件系统上。
- 图像会占用大量内存
- 您不需要内存中的这些图像。如果应用程序内存不足,多花一秒钟从文件加载图像就可以了。
- 当您收到该内存警告时,您可以完全转储图像缓存。
- 这将释放系统所需的内存
您正在创建一个具有多个不同级别的精彩游戏。
将一个关卡加载到您精美的游戏引擎中需要一段时间,因此如果用户有足够的内存,您可以在玩第 2 关时加载第 3 关。
- 关卡占用大量内存
- 你不需要更高级别的记忆。它们很高兴拥有,但不是必需的。
-
LevelCache.sharedCache().nextLevel = nil
释放所有内存
你不应该取消分配什么
切勿取消分配屏幕上的内容。我已经看到一些相关问题的答案取消了 UIViewController 的视图分配。如果你从屏幕上删除所有内容,你很可能会崩溃(在我看来)。
Examples
如果用户打开了正在编辑的文档,请勿取消分配它。如果您的应用程序在没有保存的情况下删除了他们的工作,用户会对您非常生气。 (事实上,当发生这种情况时,你可能应该有一些紧急保存机制)
如果您的用户正在为您出色的社交媒体应用程序撰写帖子,请不要浪费他们的工作。保存它并在他们再次打开应用程序时尝试恢复它。尽管设置工作量很大,但我喜欢执行此操作的应用程序。
Note
大多数现代设备很少会出现内存不足的情况。该系统在杀死后台应用程序以释放内存给前台运行的应用程序方面做得非常好。
您可能已经在应用程序切换器中看到一个应用程序“打开”,但当您点击该应用程序时,它会打开到其初始状态。操作系统在后台杀死了该应用程序以释放内存。看国家恢复 https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/StrategiesforImplementingYourApp/StrategiesforImplementingYourApp.html有关如何避免此问题的信息。
如果您的应用程序在没有进行大量处理时收到一致的内存警告,请首先确保您没有泄漏内存。
检测内存泄漏超出了本答案的范围。Docs https://developer.apple.com/library/ios/documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html and a tutorial http://www.raywenderlich.com/2696/instruments-tutorial-for-ios-how-to-debug-memory-leaks.