UITableView增加了内存

时间:2013-12-08 18:19:30

标签: memory tableview

我创建了一个带有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姓氏。

0 个答案:

没有答案