我不知道我是否正确使用了viewDidUnload。我应该发布我在.h文件中声明的所有内容吗?
以下是我现在的表现:
@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;
}
这是正确的做法吗?
可能不是,因为我的应用程序在每次内存警告时崩溃。
谢谢!
答案 0 :(得分:3)
当发生内存不足警告时,UIViewController
类会清除其视图,如果它知道它可以重新加载或稍后再次重新创建它们。如果发生这种情况,它还会调用viewWillUnload
和viewDidUnload
方法,让您的代码有机会放弃与视图层次结构相关联的任何对象的所有权,包括从nib文件加载的对象,在viewDidLoad方法中创建的对象,以及在运行时延迟创建并添加到视图层次结构中的对象。
答案 1 :(得分:1)
developer.apple说:
当视图控制器收到内存警告(didReceiveMemoryWarning)时,它应该放弃当前不需要的资源的所有权,并且可以在以后需要时重新创建。一个这样的资源是视图控制器的视图本身。如果它没有superview,则视图被处理掉(在其实现的didReceiveMemoryWarning中,UIViewController调用[self setView:nil])
编程指南是here
将所有IBOutlets设置为nil in - (void)viewDidUnload。 如果您使用的是iOS 5,最好使用IBOutlets的“弱”引用。
我建议你将每个iterface元素的Control-Drag从NIB(xib)或Storyboard转换为你的接口代码。它将为您生成所有字段。