0

我正在尝试使用从服务器加载的图像缩略图构建我的应用程序。图像数量众多。因此,当我尝试在我的 iPod 中运行时,它会在加载 50 到 60 张图像后崩溃。崩溃是由于我通过使用仪器测试我的应用程序而了解到的内存泄漏。我为每个 imageView 使用了 imageViews 和一个按钮,并且我还释放了这些对象。这是我在我的应用程序中使用的代码。

NSInteger result = [self loadedBlipCount] + (_feed.hasMore ? 1 : 0);


if (result == 0 && _emptyFeedCell)
    result = 1;
int outer_count = result/3;


scroll_view.backgroundColor = [UIColor whiteColor];

scroll_view.delegate = self;

for (int i=0; i<outer_count; i++)
//if (i<outer_count)

{
    xPos = 10;

    for (int j=0; j<3; j++) {


        _blipyy = [_feed blipAtIndex:count];


       image_view = [[URLImageView alloc] initWithFrame:CGRectMake(xPos, yPos, 90, 90)];

        image_view.tag = count_tag;
        image_view.url = _blipyy.image_tab_images;



        UIButton *img_butt = [[UIButton alloc] initWithFrame:CGRectMake(xPos, yPos, 90, 90)];
        img_butt.tag = count_tag + 10000;
        [img_butt addTarget:self action:@selector(image_tapped:) forControlEvents:UIControlEventTouchUpInside];

        xPos = xPos + 95;
        count = count + 1;
        count_tag = count_tag + 1;
        //count_1= count_1 +1;

        [scroll_view addSubview:image_view];
        [scroll_view addSubview:img_butt];
        [image_view release];
        [img_butt release];
        //[image_view release];
    }
    // });
    yPos = yPos + 95;

}

请帮我解决这个问题。提前致谢!!

4

3 回答 3

1

使用您自己的实现和重新使用单元格来代替滚动视图获取UITableView和自定义。UITableViewCell它将在没有任何内存问题的情况下工作。

于 2013-02-19T11:44:00.973 回答
0

试试 SDWebImage - 它非常适合我的所有项目,而且易于集成和使用!

https://github.com/rs/SDWebImage

于 2013-02-19T11:36:24.237 回答
0

这个问题需要你改变你的方法。使用其中任何一个都很重要UITableView(它将帮助您处理内存问题)。但是,如果您仍想继续使用,UIImageView那么我建议您使用此AsyncImageView。要调用此 API:

ASyncImage *img_EventImag = alloc with frame;
NSURL *url = yourPhotoPath;
[img_EventImage loadImageFromURL:photoPath];
[self.view addSubView:img_EventImage]; // In your case you'll add in your TableViewCell.

这与使用 UIImageView 相同。很简单,它可以为您完成大部分工作。AsyncImageView 包括 UIImageView 上的一个简单类别,用于在 iOS 上异步加载和显示图像,以便它们不会锁定 UI,以及用于更高级功能的 UIImageView 子类。AsyncImageView 与 URL 一起使用,因此它可以与本地或远程文件一起使用。

加载/下载的图像缓存在内存中,并在出现内存警告时自动清理。AsyncImageView 独立于 UIImage 缓存运行,但默认情况下,位于应用程序包根目录中的任何图像都将存储在 UIImage 缓存中,以避免缓存图像的任何重复。

该库还可用于独立于 UIImageView 加载和缓存图像,因为它提供对底层加载和缓存类的直接访问。

于 2013-02-19T11:42:27.547 回答