我创建了一个带有tableview的应用程序。它包含使用JSON从URL请求的名称列表。但是,当我长时间上下滚动时(我使用右边的索引列表来加快进程),内存不断上升。我只测试了我的设备并跟踪了xcode中的内存使用情况。当它达到大约50-60MB时,我的iPhone重新启动(甚至没有在日志窗口看到崩溃:P)。
当我继续前进到桌面视图中的下一个视图时,我的记忆也会不断增加(所以一直选择相同的单元格)。但我首先要修复tableview问题。这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger voornaamTag = 1;
NSInteger tussenvoegselTag = 2;
NSInteger achternaamTag = 3;
static NSString *cellIdentifier = @"xCell";
NSString *key = [[self sectionKeys] objectAtIndex:[indexPath section]];
NSArray *contents = [[self sectionContents] objectForKey:key];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
UILabel *voornaamLabel = [[[UILabel alloc] initWithFrame:CGRectMake(16, 8, 100, 40)] autorelease];
voornaamLabel.backgroundColor = [UIColor clearColor];
//voornaamLabel.textColor = [UIColor whiteColor];
voornaamLabel.tag = voornaamTag;
voornaamLabel.font = [UIFont fontWithName:@"Segoe-Semibold" size:19];
[voornaamLabel setNumberOfLines:1];
UILabel *tussenvoegselLabel = [[[UILabel alloc] initWithFrame:CGRectMake(16, 8, 100, 40)] autorelease];
tussenvoegselLabel.backgroundColor = [UIColor clearColor];
//tussenvoegselLabel.textColor = [UIColor whiteColor];
tussenvoegselLabel.tag = tussenvoegselTag;
tussenvoegselLabel.font = [UIFont fontWithName:@"SegoeUI-Light" size:19];
[tussenvoegselLabel setNumberOfLines:1];
UILabel *achternaamLabel = [[[UILabel alloc] initWithFrame:CGRectMake(16, 8, 100, 40)] autorelease];
achternaamLabel.backgroundColor = [UIColor clearColor];
//achternaamLabel.textColor = [UIColor whiteColor];
achternaamLabel.tag = achternaamTag;
achternaamLabel.font = [UIFont fontWithName:@"SegoeUI-Light" size:19];
[achternaamLabel setNumberOfLines:1];
[cell.contentView addSubview:voornaamLabel];
[cell.contentView addSubview:tussenvoegselLabel];
[cell.contentView addSubview:achternaamLabel];
}
NSInteger row = [indexPath row];
NSDictionary *personDictionary = nil;
if (tableView == [[self searchDisplayController] searchResultsTableView])
{
personDictionary = [[self searchResults] objectAtIndex:row];
}
else
{
personDictionary = [contents objectAtIndex:[indexPath row]];
}
NSString *voornaam = [personDictionary objectForKey:@"voornaam"];
NSString *tussenvoegsel = [personDictionary objectForKey:@"tussenvoegsel"];
NSString *achternaam = [personDictionary objectForKey:@"achternaam"];
UILabel *voornaamLabel = (UILabel *)[[cell contentView] viewWithTag:voornaamTag];
[voornaamLabel setText:voornaam];
[voornaamLabel sizeToFit];
UILabel *tussenvoegselLabel = (UILabel *)[[cell contentView] viewWithTag:tussenvoegselTag];
[tussenvoegselLabel setFrame:CGRectMake(voornaamLabel.frame.size.width + 21, 8, 100, 40)];
[tussenvoegselLabel setText:tussenvoegsel];
[tussenvoegselLabel sizeToFit];
UILabel *achternaamLabel = (UILabel *)[[cell contentView] viewWithTag:achternaamTag];
if ([tussenvoegsel length] != 0)
{
[achternaamLabel setFrame:CGRectMake(tussenvoegselLabel.frame.origin.x + tussenvoegselLabel.frame.size.width + 5, 8, 100, 40)];
}
else
{
[achternaamLabel setFrame:CGRectMake(voornaamLabel.frame.size.width + 21, 8, 100, 40)];
}
[achternaamLabel setText:achternaam];
[achternaamLabel sizeToFit];
return cell;
}
仅供参考:Voornaam表示名字,tussenvoegsel表示第二个名字,achternaam姓氏。