loadNibNamed中的内存泄漏?

时间:2009-10-29 19:36:48

标签: iphone cocoa memory-leaks nib

我即将结束我的第一个iPhone应用程序,并想通过Leaks Performance Tool运行它。在修复了一个明显的一个之后,我剩下的唯一一个是Nib充当通过loadNibNamed加载的表头视图(我在这里遵循Recipes演示)。


- (void)viewDidLoad {
    [super viewDidLoad];

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

然后在dealloc中:


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

Instruments告诉我,我正在泄漏256个字节,其中2个泄漏源自loadNibNamed。 tableHeaderView是Nib中唯一的顶级对象(我在调试器中验证过)。有什么我忘记发布的东西吗?我误解了乐器告诉我的内容吗?这是错的吗?这是操作系统稍后会清理的东西吗?

2 个答案:

答案 0 :(得分:5)

加载nib时,您负责释放nib文件中的所有顶级对象。除了TableHeaderView之外,该文件中还有什么内容吗?

答案 1 :(得分:2)

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

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

为了避免混淆,在你的.h中,你会声明:

NS/UI/??xxxxxx *_MyObjectName;   //notice the underscore

然后财产就像这样:

@property .... NS/UI/??xxxxxx *MyObjectName;   //no underscore

然后合成这样的getter / setter:

@synthesize MyObjectName=_MyObjectName;

最后,使用[self.MyObjectName ...];

引用整个程序中的对象