【问题标题】:ScrollView a lot of images which use a lot of memory滚动查看大量图像,这些图像使用大量内存
【发布时间】:2015-11-15 18:45:55
【问题描述】:

我的 iPhone 应用程序包含 170 张图片。我将它们读入一个数组,并在循环中在取景器中添加一张图片,然后将图像视图作为滚动视图的子视图。

运行我的应用程序时使用了过多的内存 700mb。我试图缩小图片的大小,但没有用。

我的一个朋友说我应该只添加图像#1和#2。当用户块滚动到第1张图片时,只显示第2张图片。然后删除第1张图片从图像查看器中添加图片编号 3。

他说这样我可以维持正常的内存消耗。但我不明白如何做到这一点? : D

你能举个例子吗?提前致谢。

不使用 UICollectionView

这是我的代码:

- (void) addImageViewToScrollView {

    //create ArrayImages
    NSMutableArray *tempArray = [[NSMutableArray alloc] init];

    for (int x = 0; x < 170; x++) {

        [tempArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",x]]];

    }
    self.imagesArray = [NSArray arrayWithArray:tempArray];

    //Frame ScrollView in UIView
    self.scrollView.contentSize =
    CGSizeMake(self.scrollView.frame.size.width * self.imagesArray.count,
           self.scrollView.frame.size.height);

    //scrollView add subview ImageView
    for (int i = 0; i < self.imagesArray.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 = [self.imagesArray objectAtIndex:i];
        _imageView.frame = frame;
        [scrollView addSubview:_imageView];

    }
    self.pageControll.currentPage = 0;
    self.pageControll.numberOfPages = self.imagesArray.count;
}

为了便于阅读,我决定拆分代码

 - (void)scrollViewDidScroll:(UIScrollView *)sender {

    CGFloat pageWidth = self.scrollView.frame.size.width;
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

    self.pageControll.currentPage = page;
    self.imageIndex = page;

}

#pragma mark - ChangePage
- (IBAction)changePage {

    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * self.pageControll.currentPage;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;
    [self.scrollView scrollRectToVisible:frame animated:YES];
    pageControlBeingUsed = YES;

} 

【问题讨论】:

  • 使用UICollectionView。它使这一切变得容易得多。
  • @rmaddy 我非常不喜欢简单的编程方式,但也难倒优秀的程序员!
  • 真的吗?您宁愿编写非标准的、难以处理的代码,也不愿使用 Apple 提供的标准工具,该工具可以更轻松地编写此类 UI,同时减少错误并改善内存管理?

标签: ios objective-c memory-management


【解决方案1】:

您可以使用 imageWithContentsOfFile 而不是使用 imageNamed,因为 imageWithContentsOfFile 不会缓存图像。因此最好使用,以减少内存问题。

【讨论】:

    猜你喜欢
    • 2023-01-14
    • 2015-04-03
    • 2012-06-20
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多