UITableViewCells图像导致内存增长

时间:2014-03-10 15:11:41

标签: ios objective-c memory uitableview

我目前正在创建一组配置文件,其中包含每个配置文件的个性化图像(用户可选)。使用由故事板创建的UITableViewController显示配置文件。代码工作正常,但是当我使用storyboard将模态转换到另一个ViewController时,每个图像的内存仍然存在。如果我转换回UITableViewController,内存加倍,图像似乎重新加载到内存中。我正在使用ARC,图像存储在standardUserDefault中。以下是相关代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    profiles = [[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"profileName"] allKeys];
    NSMutableDictionary *temp = [[NSMutableDictionary alloc] init];
    for(NSString *profName in profiles) {
        NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@-image", profName]];
        [temp setObject:[UIImage imageWithData:imageData] forKey:profName];
    }
    images = [NSDictionary dictionaryWithDictionary:temp];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"profiles";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    NSString *profName = [profiles objectAtIndex:indexPath.row];
    [cell.textLabel setText:profName];
    cell.imageView.image = [images objectForKey:profName];
    return cell;
}

如果我用以下代码替换为每个单元格设置图像的行:

cell.imageView.image = [UIImage imageNamed:@"someImage.png"];

内存释放得很好。我没有做任何其他事情来释放内存或在代码的任何其他部分设置任何nil。当我从UITableViewController转换时,有人可以帮我确定释放内存的方法吗?我也愿意接受其他方法来保存用户为配置文件选择的图像的建议(来自UIImagePickerController)。

0 个答案:

没有答案