6

我即将完成我的第一个 iPhone 应用程序,并想通过 Leaks Performance Tool 运行它。在修复了一个明显的问题之后,我只剩下一个带有 Nib 作为通过 loadNibNamed 加载的表头视图的一个(我在此处关注食谱演示)。


- (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 中唯一的顶级对象(我已经在调试器中验证了这一点)。有什么我忘记发布的吗?我是否误解了 Instruments 告诉我的内容?这是错的吗?操作系统稍后会清理它吗?

4

2 回答 2

4

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

于 2009-11-01T11:34:40.567 回答
2

Instruments 是仅在模拟器上告诉您这一点,还是在实际设备上报告相同的事情?如果你没有在设备上得到它,那么它就是模拟器——这是众所周知的(它不是完全匹配的)。

另外,在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 ...];

于 2009-10-29T19:47:02.107 回答