我该如何处理Subview内存泄漏?

时间:2010-12-07 07:12:54

标签: memory-management memory-leaks ios4 subview

Leaks仪器在某些代码上发出警报声,但我不知道如何在不崩溃应用程序的情况下解决泄漏问题。这里有一些代码总结了我的方法,一段时间以前编写过,显然需要重新思考:

labels = [[NSMutableArray alloc] init];

for(int i = 0; i < 10; i++) {
    // calculate x and y...
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)];
    // customize label...
    [labels addObject:label];
    [label release];
    [self addSubview:[labels objectAtIndex:i]];
}

为什么要打扰标签NSMutableArray?后来,在其他方法中,我需要更改标签的alpha,并且方便的是能够说

[[labels objectAtIndex:num] setAlpha:0.5];

我认为发生泄漏是因为标签在正常的应用程序生命周期中没有被解除分类,只有在退出时才会对superview进行dealloc。

帮助!

感谢。

1 个答案:

答案 0 :(得分:0)

这可能正在发生,因为你没有取消标记数组。如何在for循环之后释放标签数组,然后使用.tag在UIView上设置标签,稍后通过.tag使用 viewWithTag 找到标签来找到标签?

labels = [[NSMutableArray alloc] init];

for(int i = 0; i < 10; i++) {
    // calculate x and y...
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)];
    label.tag = 100;
    // customize label...
    [labels addObject:label];
    [label release];
    [self addSubview:[labels objectAtIndex:i]];
}

[labels removeAllObjects];
[labels release];

之后

(UILabel*) [[self.view viewWithTag:100] setAlpha:0.5];