我即将结束我的第一个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中唯一的顶级对象(我在调试器中验证过)。有什么我忘记发布的东西吗?我误解了乐器告诉我的内容吗?这是错的吗?这是操作系统稍后会清理的东西吗?
答案 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 ...];