【问题标题】:Does dealloc get called after viewDidUnload?在 viewDidUnload 之后会调用 dealloc 吗?
【发布时间】:2010-02-11 19:44:52
【问题描述】:

一个简单的问题,在 viewDidUnload 之后,dealloc 是否也被调用?我问的是pickerData,我的理解是当调用dealloc时该变量将被释放。我问的原因是我在一本书中注意到作者在 viewDidUnload 中将 pickerData 设置为 nil。这是无害的矫枉过正,甚至可能是一种好的做法,还是不存在没有另一个就不会被调用的场景。

界面:

@interface SingleViewController : UIViewController {
    NSArray *pickerData;
}
@property(nonatomic, retain) NSArray *pickerData;
@end

实施:

-(void)viewDidUnload {
    [self setSinglePicker:nil];
    [self setPickerData:nil]; 
    [super viewDidUnload];
}

-(void)dealloc {
    NSLog(@"Here");
    [singlePicker release];
    [pickerData release];
    [super dealloc];
}
@end

加里

【问题讨论】:

    标签: objective-c cocoa-touch


    【解决方案1】:

    不,viewDidUnload: 在 UIViewController 的视图被释放时调用。 dealloc:仅在 UIViewController 的引用计数变为零时调用。作者的代码是很好的做法。

    作者使用综合方法将 ivars 设置为 nil,这意味着向这些 ivars 发送发布消息。 viewDidUnload: 是您应该释放可以轻松重新创建的任何对象或内存的地方。作者本质上是在说,“我不再需要引用这些东西了,减少保留计数,希望这会释放一些内存。如果有必要,我稍后会在 viewDidLoad: 中重新创建它。”

    如果将 dealloc 调用为 nil 的消息由 Objective-C 运行时处理,则将 ivars 设置为 nil 不会产生任何后果。

    【讨论】:

    • 当 UIViewControllers 引用计数变为零时,即当 UIViewController 被释放时。我没有意识到这一点,很高兴知道和充分的理由都有 [self setPickerData:nil]; & [pickerData 发布];
    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 2011-07-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2012-06-25
    • 2010-12-18
    相关资源
    最近更新 更多