当我分析我的代码时,我开始了这些:
Method returns an Objective-C object with a +1 retain count
和
Object leaked: object allocated and stored into 'headerLabel' is not referenced later in this execution path and has a retain count of +1
这个方法:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
// create the parent view that will hold header Label
UIView* customView = [[UIView alloc] initWithFrame:CGRectMake(15.0, 0.0, 300.0, 44.0)];
// create the button object
UILabel * headerLabel = [[UILabel alloc] initWithFrame:CGRectZero];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.opaque = NO;
headerLabel.textColor = [UIColor whiteColor];
headerLabel.highlightedTextColor = [UIColor whiteColor];
headerLabel.font = [UIFont boldSystemFontOfSize:15];
headerLabel.frame = CGRectMake(10.0, 0.0, 300.0, 44.0);
if (section == 0)
headerLabel.text = NSLocalizedString(@"A", @"A");
else if (section == 1)
headerLabel.text =NSLocalizedString(@"B", @"B");
else if (section == 2)
headerLabel.text = NSLocalizedString(@"C", @"C");
if(searching)
headerLabel.text = NSLocalizedString(@"SEARCH", @"Search Results");
[customView addSubview:headerLabel];
return customView;
}
现在,扩展我想要理解的箭头,并且我假设没有取消分配customView。是不是?
我该如何解决?我是新来的,帮助我理解!
答案 0 :(得分:5)
添加
[headerLabel release];
后
[customView addSubview:headerLabel];
或像这样初始化
UILabel * headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
当然,假设您没有使用ARC
答案 1 :(得分:1)
[customView addSubview:headerLabel];
在此行之后,您应该释放headerLabel
变量。
理解对象所有权的概念很重要。在 目标C,对象所有者是具有的人(或代码) 明确说“对,我需要这个对象,不要删除它”。这个 可以是创建对象的人(或代码) 。或者它可能是另一个人(或代码) 收到了对象并需要它。 因此,对象可以拥有多个所有者。业主数量 对象有,也是引用计数。
看看这个Memory Management with Objective C / Cocoa / iPhone。 在您的代码中,您创建了headerLabel,因此您是该对象的所有者;你必须释放那个对象。
答案 2 :(得分:0)
应该发布headerLabel,如果你的方法创建了一个实例并保留了它,那么它的名字必须以" new"," copy"或"分配"