gpt4 book ai didi

objective-c - dealloc 在 vi​​ewDidUnload 之后会被调用吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:02 25 4
gpt4 key购买 nike

一个简单的问题,在 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

加里

最佳答案

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

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

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

关于objective-c - dealloc 在 vi​​ewDidUnload 之后会被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com