我是IOS编程的新手,我正在开发我想提交给app store的第一个应用程序。
这就是为什么我在viewDidLoad()
函数中初始化所有对象时犯了一个错误。一旦用户退出视图控制器,我正在使用viewDidUnload()
函数释放内存。即使x-code
内存检查工具显示对象尚未删除(RAM使用量不会减少)。
有谁知道如何解决这个问题,或者我将不得不重写整个代码?
答案 0 :(得分:2)
<强> viewDidUnload 强>
从内存中释放控制器视图时调用。 (在iOS 6.0中不推荐使用。在低内存条件下不再清除视图,因此永远不会调用此方法。)
- (void)viewDidUnload
讨论 在iOS 5及更早版本中,当发生内存不足的情况并且不需要当前视图控制器的视图时,系统可以在视图控制器的视图发布后选择调用此方法。这种方法是您进行任何最终清理的机会。如果视图控制器存储了对视图或其子视图的单独引用,则可以使用此方法来释放这些引用。您还可以使用此方法删除对您为支持视图而创建的任何对象的引用,但现在视图已不再使用。您不会使用此方法来发布用户数据或任何其他无法轻松重新创建的信息。
在iOS 6及更高版本中,不需要清除视图控制器中视图和其他对象的引用。
在调用此方法时,view属性为nil。
内存管理
内存是iOS中的关键资源,视图控制器提供内置支持,可在关键时刻减少内存占用。 UIViewController类通过didReceiveMemoryWarning方法提供一些自动处理低内存条件的方法,该方法释放不需要的内存。
在iOS 6之前,当发生内存不足警告时,UIViewController类会清除其视图,如果它知道它可以重新加载或稍后再次重新创建它们。如果发生这种情况,它还会调用viewWillUnload和viewDidUnload方法,使代码有机会放弃与视图层次结构关联的任何对象的所有权,包括从nib文件加载的对象,在viewDidLoad方法中创建的对象以及创建的对象懒惰地在运行时并添加到视图层次结构中。在iOS 6上,视图永远不会被清除,并且永远不会调用这些方法。如果视图控制器需要在内存不足时执行特定任务,则应覆盖didReceiveMemoryWarning方法。
答案 1 :(得分:0)
viewDidUnload
已弃用。 (链接1)很难使用,也没有调用&gt; = iOS 6。
视图控制器在不使用时会自动释放。但是如果有任何对视图控制器的引用,它们仍将驻留在内存中。您应该检查视图控制器的所有强引用。
答案 2 :(得分:-1)
iOS编程现在有ARC,因此如果使用ARC,则无需担心内存问题。 ARC tutorial
答案 3 :(得分:-1)
viewDidUnload
。它已不再被调用。如果您正在使用ARC,请不要担心内存管理,因为一切都在为您服务。如果您不使用ARC,请将您的资料放入dealloc