繁体   English   中英

Swift 2.2内存管理

[英]Swift 2.2 memory management

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

现在,如果我myView.removeFromSuperview() ,内存不会下降,如果我一直添加和删除其他图像的视图,例如:

  1. 设置图像
  2. 将其添加到视图中
  3. 从superview中删除图像
  4. 设置另一个图像
  5. 将其添加到同一视图中
  6. 回到3并继续循环

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

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

使用Swift,使用ARC(自动引用计数),无法手动释放内存。 内存管理严格委派给操作系统,如果你想提高应用程序的内存性能,唯一的办法就是改进代码本身。

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

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

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

最后,优化在屏幕上表示此大图像的方式,以优化所需的内存量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM