我正在尝试使用从服务器加载的图像缩略图来构建我的应用程序。图像数量很多。因此,当我尝试在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;
}
请帮我解决这个问题。在此先感谢!!
答案 0 :(得分:1)
而不是滚动View使用您自己的实现UITableView
并自定义UITableViewCell
并重新使用单元格。它可以解决任何内存问题。
答案 1 :(得分:0)
尝试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加载和缓存图像,因为它提供了对底层加载和缓存类的直接访问。