2010-12-07 10 views
0

Das Leaks-Instrument löst bei einigen Codes einen Alarm aus, aber ich weiß nicht, wie ich das Leck beheben soll, ohne die App zu beschädigen. Hier ist ein Code, mein Ansatz zusammenfassen, einige Zeit geschrieben vor und klar in der Notwendigkeit des Umdenkens:Wie kann ich mit einem Subview-Speicherleck umgehen?

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]]; 
} 

Warum mit den Etiketten stören NSMutableArray? Später, in anderen Verfahren, muss ich die Alpha der Etiketten ändern, und es ist praktisch der Lage sein, zu sagen,

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

Ich glaube, das Leck tritt auf, weil Etiketten nicht während der normalen App Lifecycle dealloc'ed Bekommt , nur wenn die Superview beim Beenden deaktiviert wird.

Hilfe!

Danke.

Antwort

0

Es passiert wahrscheinlich, weil Sie das Etiketten-Array nicht deallocieren. Was ist mit den Etikett Array nach dem for-Schleife der Freigabe, dann auf der UIView das Etikett setzen mit .tag und das Etikett später über die .tag viewWithTag zu setAlpha mit finden?

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]; 

Dann später

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

ich weiter ging sogar als dieser Ansatz - beschlossen, nicht mit einem Etiketten-Array zu stören und nur hinzugefügt Label als Subview mit dem Tag = 100 + i, veröffentlichte es dann, in jeder Iteration der Schleife. – ed94133

Verwandte Themen