2011-08-17 91 views
2

我是iPhone开发新手。在viewDidUnload中发布有没有区别?

我在我的应用程序中使用了一些按钮和标签。我在dealloc函数中释放所有这些按钮和标签。
我也在viewDidUnload中释放它们。

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
self.ans1 = nil; 
self.ans2 = nil; 
self.ans3 = nil; 
self.ans4 = nil; 
self.button = nil; 
self.button2 = nil; 
self.button3 = nil; 
self.button4 = nil; 
} 

我只是想知道它对内存管理有好处,或者对内存管理没有任何影响。
为什么我们使用?

在此先感谢.. !!

回答

3

它不是时viewDidUnload称为该被卸载而只是其视图视图控制器。 视图控制器保持活动状态,直到它被释放。

在viewDidUnload中,您必须发布属于视图的所有对象以及可以在viewDidLoad中重新创建的所有对象(因为视图控制器需要重新创建其视图时再次调用viewDidLoad)。这包括你所有的网点。您还必须将这些变量设置为零以避免过度释放它们。

因为在dealloc中,您应该释放视图控制器保留的所有对象,包括您包含在viewDidUnload中的所有对象。

+0

,如果我使用的UIImageView,NSInteger的,NSArray的和UIScrollView的话,我必须让他们无以viewDidUnload? – iUser

+0

在一般实践中,您可以使用dealloc方法完成所有操作,就像您在大多数应用程序中看到的那样。但关于这个问题,你可以释放iamgeView,viewDidUnload中的scrollview,然后设置nil。 – PJR

+0

谢谢!但我可以释放这些对象在ViewDidUnload和dealloc函数?或者它会导致任何内存泄漏? – iUser

1

这对内存管理很有用。如果您在卸载控制器时释放与View控制器相关的对象,则可以有效减少应用程序的内存占用量。即使在不使用它们的情况下也可以保留对象,这使得应用程序更容易发生内存警告&最终终止。

因此,在ViewDidUnload版本中分配ViewDidLoad &是一种很好的做法。

HTH,

阿克沙伊

+0

谢谢:)阿克沙伊所以 – iUser

2

viewDidUnload用于释放视图创建时可能做出的任何事情 - 这包括viewDidLoad中的所有内容,还包括从xib文件内部创建的IBOutlet属性。这些应该全部被释放并且在viewDidUnload中设置为零。

其他任何东西都应该在dealloc中发布。

这个想法是,如果调用viewDidUnload来释放一些内存,视图可以从您的viewDidLoad方法中再次完全重新创建。

也看到这个问题;

memory management on the iPhone with viewDidUnload

相关问题