viewControllers中的内存管理

时间:2012-10-16 11:27:59

标签: iphone variables memory memory-management view

在我的应用中,我有许多 viewControllers ,在这些视图的viewDidUnload方法中,我一直将变量设置为nil,如下所示,{{1} - 但是我想知道这是否是正确的方法呢?

我的其他 viewControllers 都使用这行代码myString = nil;关闭/关闭但是我不确定这是否会实际调用[self dismissModalViewControllerAnimated:YES];方法或是否有卸载 viewController 的更好方法。

我从来没有完全清楚内存管理的规则是什么,而且我知道新的viewDidUnload功能变得更容易了。

2 个答案:

答案 0 :(得分:2)

  1. 您是否使用ARC?
  2. 如果不使用ARC,myString = nil什么都不做,它不会发布任何内容(但self.myString = nil会发布)
  3. 如果您将视图存储在@property(retain)(或@property(copy))中,则应将这些属性设置回nil中的viewDidUnload。 (iOS6viewDidUnload遭到拒绝之后,您甚至应该在didReceiveMemoryWarning中发布它们,并且仅当isViewLoadedYESself.view.window为{时{1}})
  4. 您不能使用nil关闭/取消subviews。你解雇了dismissModalViewControllerAnimated。当您关闭viewController时,它会从视图层次结构中删除其视图。请务必了解视图 viewControllers 之间的区别(它们是不同的对象,MVC模式的不同部分)

答案 1 :(得分:1)

简单定义 NSString * myString并执行

myString = nil;

然后它设置指向myString的空指针,但如果被引用则不释放内存。

现在如果您创建NSString * myString的@ 属性,那么:

self.myString = nil; 

如果被引用则释放内存并添加空指针。

现在在 ARC 无需释放对象,因为它会自动释放,但明智地使用

非ARC 中,您需要释放分配或引用的内存。