3

我不知道我是否正确使用了 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;
}

这是正确的做法吗?

可能不会,因为我的应用程序在每次内存警告时都会崩溃。

谢谢!

4

2 回答 2

3

当发生内存不足警告时,如果UIViewController该类知道以后可以重新加载或重新创建它们,则会清除其视图。如果发生这种情况,它还会调用viewWillUnloadviewDidUnload方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括从 nib 文件加载的对象、在 viewDidLoad 方法中创建的对象以及在运行时并添加到视图层次结构中。

于 2012-09-15T11:12:47.193 回答
1

developer.apple 说:

当视图控制器收到内存警告 (didReceiveMemoryWarning) 时,它应该放弃当前不需要的资源的所有权,如果需要可以在以后重新创建这些资源。一种这样的资源是视图控制器的视图本身。如果它没有超级视图,则处理视图(在它的 didReceiveMemoryWarning 实现中,UIViewController 调用 [self setView:nil])

编程指南在这里

在 (void)viewDidUnload 中将所有 IBOutlets 设置为 nil。如果您使用的是 iOS 5,最好使用 IBOutlets 的“弱”参考。

我建议您将每个 iterface 元素从 NIB(xib) 或 Storyboard 中按 Control-Drag 拖到您的界面代码中。它将为您生成所有字段。

于 2012-09-15T12:21:59.940 回答