ios - Swift 2.2 内存管理

标签 ios xcode swift memory-management

所以我有一个 UIView,其中包含一个带有相当大图像(比如 1600x1600)的 UIImageView。当我加载它时,我可以在 Xcode 上看到内存按预期增加但仍然可以管理。

现在,如果我 myView.removeFromSuperview() 内存不会下降,如果我继续一次添加和删除带有其他图像的 View ,例如:

  1. 设置图片
  2. 将其添加到 View 中
  3. 从父 View 中删除图像
  4. 设置另一张图片
  5. 将其添加到同一 View
  6. 回到3继续循环

在每次迭代后,我看到内存不断增加,直到我最终耗尽内存,收到内存警告并崩溃。

这是预期的吗?当我从 superview 中删除图像时,内存不应该被释放吗?

最佳答案

在 Swift 中,使用 ARC(自动引用计数),手动释放内存是不可能的。 内存管理 严格委托(delegate)给操作系统,如果您想提高应用的内存性能,唯一的方法就是改进代码本身。

如果您要处理如此大的图像,则有可能缩小图像本身的分辨率,而不会丢失应用程序的任何功能。显示此图像时,您还可以实现在主线程上执行的缓存 或“实时”压缩,从而避免使用宝贵的内存来表示像素。有一篇很好的 NSHipster 文章讨论了在 Swift 中调整图像大小的不同技术 at this link .

// Basic usage of UIGraphicsGetImageFromCurrentImageContext()
let yourScaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

UIKit 提供了许多用于调整图像大小的高级 API,这些 API 直接作用于图像在屏幕上的显示方式,因此作用于主 UI 线程。

总而言之,优化您在屏幕上表示此大图像的方式,以优化所需的内存量。

关于ios - Swift 2.2 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37886231/

相关文章:

iphone - 使用 ios 将图像转换为 gif

Swift 特定的通知观察者初始化

ios - 更新了适用于 iOS 7 的 TBXML : How to include TBXML in Xcode 5, 的指南

swift - Controller 纳米格。 TagSelectController 或 TagSelectionController

ios - (iOS) 音乐文件停止时的操作

ios - 在 iOS 中使用 CloudKit 在 iCloud 中保留收据

ios - 用户对协议(protocol) PFSubclassing 的冗余一致性(Swift 2.0)

ios - 如何在没有类名的情况下推送下一类而不是在 iOS 中使用 NSString?

ios - 如何在单击时为单元格添加边框

swift - locationManager 未被识别为类变量