2015-06-19 77 views
-1

所以,我有一个导航控制器,它连接到视图控制器。从该视图控制器,你可以去一个相同的类型视图控制器,但具有不同的内容。视图控制器的内存很紧张,所以推新的每个新视图都很昂贵。问题是,当我点击后退按钮并且视图控制器被弹出时,内存不会自行释放。有什么我应该做的,就像我不使用零的东西等?因为,假设我有5个图像要显示,每个图像需要5到10MB的内存,当我将一个新的视图控制器放在一个新的视图控制器的顶部时,我花费了30-50mbs的内存,这没关系,但是当我点击“后退”按钮并且视图控制器弹出时,我预计会释放这些50mbs。但情况并非如此。有人可以告诉我应该怎么做来更有效地管理这个内存?Swift中的内存管理

另外,有没有一种很好的方式来释放UIImageView在Swift中使用的内存?

所以,更确切地说,视图控制器的deinit不会在视图控制器从导航堆栈中移出时被调用。这同样适用于该视图控制器的一些自定义子视图。我如何确保它们被ARC清理干净,并且是否有任何工具可以帮助我跟踪将这些内容保存在内存中的引用。

回答

2

好吧,我解决了它。每个人可能遇到同样问题的快速提示。 1)拥有所有的领域(除了数字和书籍作为可选项)。将它们清除出去。 2)把所有可以在内存中引用你的对象的东西都清空了,很容易忘记的一个很好的例子就是授权。如果您的观点像委托人一样行事,请不要忘记打破这种关系。 3)如果您在应用程序中使用地图,建议使用一个共享地图,并重新绘制并每次更改其委托,而不是使用即时本能的新地图。地图可能很难从内存中清除(我尝试过map applyMemoryFix,它不起作用)

+0

谢谢,重复使用地图为我做了。我还调用mapView.removeAnnotations(myPolylines),而不是mapView.removeOverlays(myPolylines),这大概是我的地图在内存中。 – Gmeister4

+0

p.s,我的deint没有被称为由于参考周期,必须无视所有的一切viewWillDisappear – Gmeister4