如果我有一个如下的viewController设置:
@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
-(void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
}当涉及到内存管理时,我应该将释放添加到viewDidUnload和dealloc中吗?
-(void)viewDidUnload {
[locationManager release];
locationManager = nil;
[super viewDidUnload];
}
-(void)dealloc {
[locationManager release];
[super dealloc];
}干杯加里
编辑:
根据Deans友好的评论,super dealloc移到了底部。
发布于 2010-06-01 22:42:26
简短回答:
除非您在viewDidLoad (或xib)中创建/保留它,否则不要在viewDidUnload中释放它。
长篇答案:
viewDidUnload用于释放在创建视图时可能创建的任何内容-这包括viewDidLoad中的内容,但也包括从xib文件内部创建的IBOutlet属性。这些都应该被释放,并在viewDidUnload中设置为零。
其他任何东西都应该在dealloc中释放。
其思想是,如果调用viewDidUnload来释放一些内存,则可以完全从viewDidLoad方法重新创建视图。
发布于 2010-06-01 22:43:05
在viewDidUnload中,您应该将IBOutlet属性设置为nil以及在viewDidLoad中初始化的任何内容。
请记住,如果手机内存不足,如果视图不在屏幕上,则视图将被卸载。下次再次加载视图时,新视图将连接到IBOutlets,并再次调用viewDidLoad。因此,您应该在viewDidUnload中将outlet属性设置为nil,以减少内存占用。
发布于 2010-06-04 19:22:01
这个家伙在做self.object =nil之前正在做一个对象释放;
第一次发布是不是毫无意义?在Apple文档中,它们只是将nil影响到变量...晓以大义?
https://stackoverflow.com/questions/2950636
复制相似问题