viewWithTag和addSubview

时间:2012-03-13 20:46:54

标签: ios addsubview

当我按下UIButton时,我试图通过调用viewWithTag来重用标签。第一次执行代码时代码看起来没问题,但是由于第7行而多次执行它时是否泄漏?还有更好的方法是从superview,alloc和addSubview中删除标签而不是使用viewWithTag吗?

1. UILabel *label = (UILabel *)[self.view viewWithTag:100];
2. if(label == nil) {
3.   label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease];
4.   label.tag = 100;
5. }
6. 
7. [self.view addSubview:label];

2 个答案:

答案 0 :(得分:5)

将代码[self.view addSubview:label];移到if块中。如果if条件为false,则表示标签已经是viewcontroller视图层次结构的一部分,因此如果您再次添加它,就像在原始代码中一样,它将被双重保留。

UILabel *label = (UILabel *)[self.view viewWithTag:100];
if (!label) {
    label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)] autorelease];
    label.tag = 100;
    [self.view addSubview:label];
}

答案 1 :(得分:0)

如果您使用的是.xib或故事板,只需将其与IBOutlet链接即可。

如果您仅使用代码,请尝试将其另存为私有变量。