我应该在viewDidUnload中设置哪些属性为零?

问题描述:

我不知道我是否正确使用viewDidUnload。我应该释放所有我在.h文件中声明的内容吗?我应该在viewDidUnload中设置哪些属性为零?

下面是我现在做:

@property (strong, nonatomic) Readability *wrapper; 
@property (strong, nonatomic) ArticleModel *article; 
@property (strong, nonatomic) Woho *wohoItem; 
@property (strong, nonatomic) FeedItem *item; 
@property (unsafe_unretained, nonatomic) IBOutlet UIScrollView *scrollView; 
@property (strong, nonatomic) NSMutableArray *picturesArray; 
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *headTitleLabel; 

和viewDidUnload:

- (void)viewDidUnload 
{ 
    [self setHeadTitleLabel:nil]; 
    [self setScrollView:nil]; 
    self.picturesArray = nil; 
    self.item = nil; 
    self.article = nil; 
    self.wohoItem = nil; 
    self.wrapper = nil; 
} 

这是应该做的事情吗?

或许不会,因为每个存储警告我的应用程序崩溃。

谢谢!

+1

如果你正在崩溃,你开启了僵尸吗?你遇到了什么错误?你的'viewDidUnload'没有什么明显的错误。所有这些都在'viewDidLoad'中重新创建?它是否在内存警告上崩溃,或者当你回到有问题的视图?的 – Rob

+0

可能重复[是否有意义设定NSString对象为零?](http://*.com/questions/12288828/does-it-make-sense-to-set-nsstring-objects-to-nil) – jrturton

+2

此外,这个问题在9月19日变得无关紧要。 – jrturton

当内存不足的警告时,该UIViewController类清除自己的观点,如果它知道它可以重新载入或稍后再重新创建它们。如果发生这种情况,它又称viewWillUnloadviewDidUnload方法给你的代码有机会放弃与您的视图层次结构相关联的任何对象,包括从笔尖文件加载对象的所有权,在您的viewDidLoad方法对象创建和对象在运行时懒洋洋地创建并添加到视图层次结构中。

+0

所以“对象在viewDidLoad中创建”,这意味着每个对象 - 数组,字典或唯一的uiview对象?一些例子会很好 – Devfly

+0

您可以在'loadView','viewDidLoad'中重新创建或者从nib文件加载的所有东西。 – DrummerB

+1

顺便说一句,请参阅[iOS 6的发布说明](https://developer.apple.com/library/prerelease/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html)关于为'viewDidUnload潜在变化'。 – Rob

developer.apple说:

当视图控制器收到内存警告(didReceiveMemoryWarning),它应该放弃当前并不需要,如果需要,可以在以后重新创建资源的所有权。一种这样的资源是视图控制器的视图本身。如果它不具有一个上海华,该视图设置的(在其实施didReceiveMemoryWarning的,UIViewController中调用[自的setView:无])

的节目指南是here

设置在所有IBOutlets到零 - (void)viewDidUnload。 如果您使用iOS 5,则最好使用IBOutlets的“弱”参考。

我劝你还是让从NIB(厦门国际银行)或每个故事板元素iterface控制,拖动到界面代码。它会为你生成所有的领域。