如果我有一个viewController设置如下:
@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
-(void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
}
在内存管理方面,我应该向viewDidUnload&amp;添加发布。的dealloc?
-(void)viewDidUnload {
[locationManager release];
locationManager = nil;
[super viewDidUnload];
}
-(void)dealloc {
[locationManager release];
[super dealloc];
}
欢呼加里
编辑:
根据Deans的评论,[super dealloc]降到了最低点。
答案 0 :(得分:6)
简答:
除非您在viewDidLoad(或xib)中创建/保留它,否则不要在viewDidUnload中释放它。
答案很长:
viewDidUnload用于释放在创建视图时可能发生的任何事情 - 这包括viewDidLoad中的内容,但也包括从xib文件内部创建的IBOutlet属性。这些都应该被释放并在viewDidUnload中设置为nil。
其他任何东西都应该在dealloc中发布。
这个想法是,如果调用viewDidUnload释放一些内存,可以从viewDidLoad方法中再次重新创建视图。
答案 1 :(得分:5)
在viewDidUnload
中,您应该将您的IBOutlet属性设置为nil以及在viewDidLoad
中初始化的任何内容。
请记住,如果手机内存不足,如果屏幕不在屏幕上,您的视图将被卸载。下次再次加载视图时,新视图将连接到IBOutlets,并且将再次调用viewDidLoad。因此,您应该在viewDidUnload
中将插座属性设置为nil,以减少内存占用。
答案 2 :(得分:0)
这个人在做self.object = nil;
之前正在做[对象释放]第一个版本什么都没有?在Apple文档中,它们只会影响变量的nil ...什么是对的?