在我的应用中,我有许多 viewControllers ,在这些视图的viewDidUnload
方法中,我一直将变量设置为nil
,如下所示,{{1} - 但是我想知道这是否是正确的方法呢?
我的其他 viewControllers 都使用这行代码myString = nil;
关闭/关闭但是我不确定这是否会实际调用[self dismissModalViewControllerAnimated:YES];
方法或是否有卸载 viewController 的更好方法。
我从来没有完全清楚内存管理的规则是什么,而且我知道新的viewDidUnload
功能变得更容易了。
答案 0 :(得分:2)
myString = nil
什么都不做,它不会发布任何内容(但self.myString = nil
会发布)@property(retain)
(或@property(copy)
)中,则应将这些属性设置回nil
中的viewDidUnload
。 (iOS6
在viewDidUnload
遭到拒绝之后,您甚至应该在didReceiveMemoryWarning
中发布它们,并且仅当isViewLoaded
为YES
且self.view.window
为{时{1}})nil
关闭/取消subviews
。你解雇了dismissModalViewControllerAnimated
。当您关闭viewController时,它会从视图层次结构中删除其视图。请务必了解视图和 viewControllers 之间的区别(它们是不同的对象,MVC模式的不同部分)答案 1 :(得分:1)
简单你定义 NSString * myString并执行
myString = nil;
然后它设置指向myString的空指针,但如果被引用则不释放内存。
现在如果您创建NSString * myString的@ 属性,那么:
self.myString = nil;
如果被引用则释放内存并添加空指针。
现在在 ARC 中无需释放对象,因为它会自动释放,但明智地使用。
在非ARC 中,您需要释放分配或引用的内存。