0

在我的应用程序中,我有许多视图控制器,并且在viewDidUnload这些视图的方法中,我一直将变量设置nil如下,myString = nil;但是我想知道这是否是正确的方法?

我的其他viewController都使用这行代码关闭/关闭,[self dismissModalViewControllerAnimated:YES];但是我不确定这是否会真正调用该viewDidUnload方法,或者是否有更好的卸载viewController的方法。

我从来没有 100% 清楚地知道内存管理的确切规则,而且我知道有了新ARC功能,它变得更容易了。

4

2 回答 2

2
  1. 您是否使用ARC?
  2. 如果不使用 ARC,myString = nil则什么也不做,它不会释放任何东西(但self.myString = nil会)
  3. 如果您将视图存储在@property(retain)( 或@property(copy)) 中,则应将这些属性设置回nilin viewDidUnload。(在弃用iOS6where之后viewDidUnload,您甚至应该在didReceiveMemoryWarning且仅当isViewLoadedisYESself.view.windowis时才释放它们nil
  4. 您不会subviews使用dismissModalViewControllerAnimated. 你解雇UIViewControllers。当你关闭一个 viewController 时,它会从视图层次结构中删除它的视图。一定要了解视图和视图控制器之间的区别(它们是不同的对象,MVC 模式的不同部分)
于 2012-10-16T11:43:57.637 回答
1

只需定义NSString *myString 并执行

myString = nil;

然后它将空指针设置为 myString 但如果它被引用则不会释放内存。

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

self.myString = nil; 

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

现在在ARC中,不需要释放对象,因为它会自动释放,而只是明智地使用.

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

于 2012-10-16T11:39:54.233 回答