UIImageView内存泄漏崩溃问题 - 目标C

时间:2013-02-19 11:33:34

标签: iphone ios objective-c memory-leaks uiimageview

我正在尝试使用从服务器加载的图像缩略图来构建我的应用程序。图像数量很多。因此,当我尝试在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;

}

请帮我解决这个问题。在此先感谢!!

3 个答案:

答案 0 :(得分:1)

而不是滚动View使用您自己的实现UITableView并自定义UITableViewCell并重新使用单元格。它可以解决任何内存问题。

答案 1 :(得分:0)

尝试SDWebImage - 它适用于我的所有项目,因此易于集成和使用!

https://github.com/rs/SDWebImage

答案 2 :(得分: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加载和缓存图像,因为它提供了对底层加载和缓存类的直接访问。