我有一个UITableView
的子类,其中我想生成多个共享相同属性的标签(font,textColor,backgroundColor等)。
我认为实现这一目标的最简单方法是创建一个帮助方法,该方法创建一个具有一些常见属性集的标签:
- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.font = [UIFont fontWithName:@"Helvetica" size:14];
label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
return label;
}
我使用这样的方法:
UILabel *someLabel = [self defaultLabelWithFrame:CGRectMake(0,0,100,100)];
[self addSubview:someLabel];
[someLabel release];
我关注的是在方法中创建标签时保留它,但是当我将其分配给someLabel时,它会再次保留,并且在方法中创建时无法释放内存< /强>
这里最好的方法是什么?
我觉得我有两个选择:
- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.font = [UIFont fontWithName:@"Helvetica" size:14];
label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
[defaultLabels addObject:label];
[labels release]; //I can release here
return [defaultLabels lastObject]; //I can release defaultLabels when done
}
我很感激你的想法。欢呼声。
答案 0 :(得分:4)
您需要在退回之前自动释放您的对象:
- (UILabel *)defaultLabelWithFrame:(CGRect)frame
{
…
return [label autorelease];
}
Cocoa中的大多数方法都会根据需要保留对象,包括addSubview:
。如果没有对象使用(即保留)标签,您不必担心它被泄露 - 它已被添加到自动释放池中并将自动释放。