我的iPhone应用包含170张图片。我将它们读入一个数组,并在循环中在取景器中添加一张图片,然后将图像视图作为滚动视图的子视图。
运行我的应用程序时使用的内存太多700mb。我试图减小图片的大小,但它没有用。
我的一位朋友说我应该只添加#1和#2图像。当用户块滚动到1号图片时,则只显示图片2号。然后删除图片1号从图像查看器中添加第3张图片。
他说通过这种方式我可以维持正常的内存消耗。但我不明白该怎么做?
你能举个例子吗?提前谢谢。
不使用UICollectionView
这是我的代码:
- (void)addImageViewToScrollView {
_assetsArray = [[NSMutableArray alloc] init];
for (int j = 0; j < 170; j++) {
[_assetsArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d",j]]];
}
//scrollView add subview ImageView
for (int i = 0; i < [_assetsArray count]; i++) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width *i;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
_imageView = [[UIImageView alloc]init];
_imageView.image = [_assetsArray objectAtIndex:i];
_imageView.frame = frame;
[self.scrollView addSubview:_imageView];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.assetsArray.count, self.scrollView.frame.size.height);
}
-
答案 0 :(得分:0)
使用UICollectionViewController解决此问题。
这样,当您点击内存警告时,只会加载屏幕上所需的单元格,并且可以从缓存中弹出所有其他图像。
集合视图与表视图非常相似。
要使集合视图适合您正在进行的操作,您需要将流程布局设置为水平滚动,并将单元格大小设置为视图的高度和宽度。
答案 1 :(得分:0)
似乎您尝试使用170
将UIScrollView
图片添加到UIImageView.
上为什么不使用专用的UITableView's
或UICollectionView's
? Reusable Cell
的对象是为了维持运行时内存消耗。让我们回顾一下,
_assetsArray
);昂贵的消费对比,使用 UITableView 或 UICollectionView
DataSource
此外,为了支持众多图像,有很好的库来减少图像缓存。尝试使用 SDWebImage 或 FastImageCache 。我个人喜欢FIC,但你可能需要理解这个概念。