向tableview单元格显示非常大的图像

时间:2015-10-27 07:00:46

标签: ios objective-c uitableview memory-leaks out-of-memory

我想在Document中显示用户保存在uitableview目录中的一些图像。我使用下面的简单代码:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellIdentifier = @"uploadHistoryCellfa";

        BRUploadHistoryCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
        if (!cell) {
            cell = [[BRUploadHistoryCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

       //Some Other assignemt to UILables Here...

        [cell.imagePreview setImage:[UIImage imageWithContentsOfFile:myImagePathInDocument]];

       //Some other configurations here ....

        return cell;
    }

我的问题是:

图像大小约为11-25 MB。我将在每个单元格中加载一个图像。我使用的这段代码是否会导致内存泄漏或类似这样的事情?

2 个答案:

答案 0 :(得分:0)

如果屏幕上一次只显示1-2个单元格,那么它不会给您带来太多麻烦。 由于TableView将使用新图像更新已创建单元格的内容。 ( Deque Reusable Concept

但更好的方法是首先调整图像大小然后再使用。

答案 1 :(得分:0)

11-25 MB实际上是大文件如果你有UITableView你会有超过5个图像所以它会变成11-25(* 5)所以你应该在tableView上添加它们时调整图像大小,但是如果你会在显示它会减慢你的应用程序的过程中调整它的大小。所以你的第一步是保存尺寸最大为1 mb的已调整大小的图像。 第二步是生成缩略图,然后在单元格上添加thumbnail图像。

第一个链接:Resize Image

第二个链接:Image Resizing Techniques

imageIO我的练习是调整图像大小的最快方法,因为它使用CPU而用户不会看到慢滚动问题。

完成所有步骤后,请不要忘记使用foreground threadmain thread来表示单元格上的图像。