首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存管理& viewDidUnload?

内存管理& viewDidUnload?
EN

Stack Overflow用户
提问于 2010-06-01 22:33:14
回答 3查看 1.4K关注 0票数 3

如果我有一个如下的viewController设置:

代码语言:javascript
复制
@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
}

-(void)viewDidLoad {
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
}

当涉及到内存管理时,我应该将释放添加到viewDidUnload和dealloc中吗?

代码语言:javascript
复制
-(void)viewDidUnload {
    [locationManager release];
    locationManager = nil;
    [super viewDidUnload];
}


-(void)dealloc {
    [locationManager release];
    [super dealloc];
}

干杯加里

编辑:

根据Deans友好的评论,super dealloc移到了底部。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-01 22:42:26

简短回答:

除非您在viewDidLoad (或xib)中创建/保留它,否则不要在viewDidUnload中释放它。

长篇答案:

viewDidUnload用于释放在创建视图时可能创建的任何内容-这包括viewDidLoad中的内容,但也包括从xib文件内部创建的IBOutlet属性。这些都应该被释放,并在viewDidUnload中设置为零。

其他任何东西都应该在dealloc中释放。

其思想是,如果调用viewDidUnload来释放一些内存,则可以完全从viewDidLoad方法重新创建视图。

票数 6
EN

Stack Overflow用户

发布于 2010-06-01 22:43:05

viewDidUnload中,您应该将IBOutlet属性设置为nil以及在viewDidLoad中初始化的任何内容。

请记住,如果手机内存不足,如果视图不在屏幕上,则视图将被卸载。下次再次加载视图时,新视图将连接到IBOutlets,并再次调用viewDidLoad。因此,您应该在viewDidUnload中将outlet属性设置为nil,以减少内存占用。

票数 5
EN

Stack Overflow用户

发布于 2010-06-04 19:22:01

这个家伙在做self.object =nil之前正在做一个对象释放;

第一次发布是不是毫无意义?在Apple文档中,它们只是将nil影响到变量...晓以大义?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2950636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档