Ich habe meinen Code vereinfacht, um mit zu testen, und immer noch auf dem Telefon steigt meine Speicherbelegung bis zu einem Punkt, wo der Tisch langsam abbremst.Warum werden keine Tablezellen freigegeben?
Kann mir jemand sagen, was ich hier falsch mache?
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 40;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellID = @"Cell";
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease];
}
UILabel *l=[[UILabel alloc] initWithFrame:CGRectMake(10,10,300,16)];
l.font=[UIFont boldSystemFontOfSize:15];
l.textColor=[UIColor whiteColor];
l.backgroundColor=[UIColor blackColor];
[email protected]"Just some randoom text here";
[cell.contentView addSubview:l];
[l release];
Oops. Diese Code-Paste hat nicht so gut funktioniert. Hier ist eine gerade Paste:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 40;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellID = @"Cell";
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellID] autorelease];
}
UILabel *l=[[UILabel alloc] initWithFrame:CGRectMake(10,10,300,16)];
l.font=[UIFont boldSystemFontOfSize:15];
l.textColor=[UIColor whiteColor];
l.backgroundColor=[UIColor blackColor];
[email protected]"Just some randoom text here";
[cell.contentView addSubview:l];
[l release];
return cell;
}
Leider pegs Speicher mit dieser Lösung auch (gerade kopieren und einfügen). Vielleicht ist es die Art, wie die Tabellenansicht platziert wird. Ich habe den Tabbar-Controller in IB erstellt und die View-Controller auch in IB zugewiesen. Also vielleicht hat der Autorespulepool nie eine Chance zu veröffentlichen? Was wäre ein besserer Weg? Und sollte ich einen NSAutoreleasePool irgendwo anders als main setzen, um das freizugeben? Wenn ja, wenn die Ansicht selbst, die sich an der Tabbarposition befindet, nicht freigegeben wird? –
Ich weiß nicht, ob das irgendwas bedeutet, aber der Speicher ist im Simulator richtig frei. –
Der Pool wird nach jedem UI-Ereignis gelöscht. Was * genau * wird nicht veröffentlicht? Wann sehen Sie einen Speicherverlust? Ist es, wie Sie eine lange Liste von Elementen nach unten scrollen, und dann wieder aus Ihrem Viewcontroller? Sie haben dann irgendwo ein Leck. – Jason