首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >loadNibNamed中的内存泄漏?

loadNibNamed中的内存泄漏?
EN

Stack Overflow用户
提问于 2009-10-30 03:36:48
回答 2查看 4.1K关注 0票数 6

我即将结束我的第一个iPhone应用程序,我想我应该通过泄漏性能工具来运行它。在修复了一个明显的问题之后,我剩下的唯一一个就是一个带有一个笔尖的通过loadNibNamed加载的表头视图(我在这里遵循了Recipes演示)。

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];

    if (self.tableHeaderView == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"TableHeaderView" owner:self options:nil];
        self.tableView.tableHeaderView = self.tableHeaderView;
    }
}

然后在dealloc中:

代码语言:javascript
复制
- (void)dealloc {
    [tableHeaderView release];
    [super dealloc];
}

仪器告诉我,我泄漏了256个字节,其中2个泄漏来自loadNibNamed的线路。tableHeaderView是Nib中唯一的顶级对象(我已经在调试器中对此进行了验证)。是不是有什么东西我忘了发布?我是不是误解了Instruments告诉我的话?是不是错了?这是操作系统稍后会清理的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-30 03:47:02

Instruments是只在模拟器上告诉您这一点,还是在实际设备上报告相同的事情?如果你没有在设备上获得它,那么它就是模拟器--这是已知发生的(它不是完全匹配的)。

另外,在dealloc中,它不是[self.tableHeaderView release]吗?你必须与你的用法保持一致。

为了避免混淆,在你的.h中,你应该这样声明:

代码语言:javascript
复制
NS/UI/??xxxxxx *_MyObjectName;   //notice the underscore

则如下所示的属性:

代码语言:javascript
复制
@property .... NS/UI/??xxxxxx *MyObjectName;   //no underscore

然后像这样合成getter/setter:

代码语言:javascript
复制
@synthesize MyObjectName=_MyObjectName;

最后,使用[self.MyObjectName ...];在整个程序中引用该对象

票数 2
EN

Stack Overflow用户

发布于 2009-11-01 19:34:41

加载nib时,您负责释放nib文件中的所有顶级对象。除了TableHeaderView之外,文件里还有其他东西吗?

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

https://stackoverflow.com/questions/1646054

复制
相关文章

相似问题

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