首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确使用viewDidUnload

正确使用viewDidUnload
EN

Stack Overflow用户
提问于 2012-04-24 00:24:55
回答 2查看 287关注 0票数 1

我知道以前也有人问过类似的问题。但我已经搜索了一段时间,现在事情仍然有点困惑。所以开始吧..。

我没有使用ARC。如果您有一个带有实例变量和属性的视图控制器,如下所示:

ViewController.h:

代码语言:javascript
复制
@interface ViewController : UIViewController{
    NSDictionary *someDict;
}
@property(nonatomic, retain)UIView *someView;
@property(assign)UIView *someOtherView;

ViewController.m:

代码语言:javascript
复制
-(void)viewDidUnload{
    self.someView = nil;
    [someDict release];
    [someOtherView release];
    super viewDidUnload];
} 

这是实现viewDidUnload的正确方式吗?设置someDict = nil似乎是错误的,因为它会泄漏,因此我猜是释放。同样的情况也适用于someOtherView,因为它没有被保留?

我说错了吗?感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 00:39:18

self.someView = nil不会泄漏,因为它等于由@property(nonatomic, retain)UIView *someView的属性合成对自动生成的[self setSomeView:nil]。它具有retain属性,因此在设置新对象时将释放保留的对象。

我认为[someDict release];应该在dealloc中。而且不应该调用[someOtherView release];,因为它是一个没有所有权的assign属性。

更多参考资料:

票数 2
EN

Stack Overflow用户

发布于 2012-04-24 00:43:25

viewDidUnload中,您应该释放并清空作为视图控制器主视图(即不是字典!)的保留的子视图的所有视图。就这么简单。

所以你的

代码语言:javascript
复制
self.someView = nil;

是正确的,只需将所有其他保留的子视图也添加到该方法中。

不要释放someOtherView,因为这是一个已分配的属性。发布它会导致你的应用程序崩溃。

如果我是您,我会去掉iVar声明(someDict),使用所有的属性。

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

https://stackoverflow.com/questions/10284403

复制
相关文章

相似问题

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