2012-01-29 61 views
1

我只是想知道,如果在我目前有接近任何内存泄漏:视图和存储管理的iOS5

我添加多个子视图一个视图,且具有定义每个这些子视图与财产保留关键字。当函数viewDidUnload被调用时,我需要将指向这些子视图的指针设置为零,或者由于我使用ARC而自动完成。我现在在viewDidUnload函数中没有做任何事情。

感谢您的澄清!

回答

2

通过在viewDidUnload中无所作为,您可以保留子视图,但不会泄漏它们。

泄漏的对象仍在内存中,但您无法触及它(因为没有指针指向它)。这些子视图不会泄漏,因为您仍然拥有指向子视图的指针的视图控制器对象。当视图控制器被释放时,它将释放子视图,然后它们将被释放,不泄漏。 (如果视图控制器本身成为泄露,然后子视图也被泄露。)

然而,你应该放开子视图中viewDidUnload,通过属性或实例变量设置为nil。为什么?系统卸载您的视图,并在内存不足时向您发送viewDidUnload。如果你在viewDidUnload中什么都不做,那么当你不需要它们的时候,你会保留那些子视图对象,占用内存。

+0

感谢您的明确答案 – tiguero 2012-01-30 00:03:35

+0

嗨Rob - 如果我已经宣布了一个弱指针IBOutlet视图我不需要将其指针设置为零右?这将在viewDidUnload函数后自动完成?我看到一些实现,其中子视图的引用很弱,所以现在我很困惑,如果我应该使用强属性来引用子视图。由于我创建的这些子视图起初以为我是这些子视图的所有者,因此这些引用应该用强大的关键字声明。谢谢! – tiguero 2012-02-18 16:25:56

+0

我有一个新的帖子在这里分开我的第二个问题:http://stackoverflow.com/questions/9343092/should-all-reference-to-programmactically-created-subviews-declared-as-weak – tiguero 2012-02-18 16:59:30