我正在使用以下代码向tableHeaderView添加自定义视图:
imageButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
imageButton.frame = CGRectMake(120, 12, 64, 64);
imageButton.titleLabel.font = [UIFont systemFontOfSize:10];
imageButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
imageButton.titleLabel.textAlignment = UITextAlignmentCenter;
[imageButton setTitle:NSLocalizedString(@"Choose\nPhoto", @"Choose\nPhoto") forState:UIControlStateNormal];
[imageButton addTarget:self action:@selector(photoButtonPressed) forControlEvents:UIControlEventTouchUpInside];
// add existing image, if any, to button
if (child.thumbnailImage != nil) {
[imageButton setBackgroundImage:child.thumbnailImage forState:UIControlStateNormal];
}
// add button to view
self.headerView = [[UIView alloc] initWithFrame:CGRectMake(22, 12, 70, 70)];
[headerView addSubview:imageButton];
// add view to table header
self.tableView.tableHeaderView = headerView;
内存泄漏显示在headerView UIView的上面的alloc行上。 我在头文件中声明UIView和UIButton并在ViewDidUnload和dealloc中释放它,所以我不确定我做错了什么。 此外,这只出现在设备而不是模拟器上(我想提到过)。
任何帮助都将不胜感激。
谢谢,
杆
答案 0 :(得分:1)
您正在使用headerView setter方法(self.headerView
),因此您需要使用release
或autorelease
释放分配给headerView属性的UIView实例。
e.g。
UIView* newHeaderView = [[UIView alloc] initWithFrame...];
self.headerView = newHeaderView;
[newHeaderView release];
或
self.headerView = [[[UIView alloc] initWithFrame:...] autorelease];
原因是headerView
setter方法自动保留分配给它的对象。
或者,您可以直接设置headerView实例变量,而无需使用属性setter方法:
[headerView release]; // release any existing object
headerView = [[UIView alloc] initWithFrame:...];