UICollectionView 应用程序崩溃,在 iPhone 上显示大量图像

Posted

技术标签:

【中文标题】UICollectionView 应用程序崩溃,在 iPhone 上显示大量图像【英文标题】:UICollectionView App crashes showing large number of images on iPhone 【发布时间】:2013-03-19 05:45:28 【问题描述】:

我需要在 UICollectionView 上显示大约 300 张图像。我添加了自定义 UICollectionViewCell 和子视图 UIImageView,现在当我尝试从 Web 服务器在 UICollectionView 上显示图像时,它会显示大约 150 个图像,然后应用程序崩溃显示低级内存。以下是我的代码,请告诉我我做错了什么。

-(void)updateView 

    for (int i = 0; i < m_nPhotoCount; i ++)
    
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

            NSURL *imageURL = [NSURL URLWithString:[aryList objectAtIndex:i]];
            UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]];
            if(image == nil)
            
                NSLog(@"kashif");
            
            else 
                [self.imageArray addObject:image];
            
            dispatch_sync(dispatch_get_main_queue(), ^
                [collectionView reloadData];
            );
        );
    


    #pragma mark - UICollectionView Datasource

    - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 

        return [self.imageArray count];
    


    - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath 

        static NSString *CellIdentifier = @"GalleryCell";
        GalleryCell *cell = (GalleryCell*)[cv dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.imageView.image = [self.imageArray objectAtIndex:indexPath.row];
        return cell;
    

    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

        return [[UICollectionReusableView alloc] init];

    

【问题讨论】:

【参考方案1】:

您采取了错误的方法。你应该做的是,你应该一次只下载那些数量的图像(相当于 CollectionView 的可见单元格的数量)。

当集合视图滚动时,下载更多图像并清除或将以前的图像存储在缓存中。

您可以使用这个出色的图像下载和缓存库:SDWebImage

【讨论】:

您好,之前我尝试过使用 UITableView 的 SDWebImage,但它不起作用,请您帮我解决 UICollectionView 的缓存问题。 @user1237473 “它不起作用”是什么意思,您在 viewController 中导入了 UITableView 特定的图像缓存头文件以缓存 Tableview 中的图像?【参考方案2】:

图库有一些特殊的库。您应该尝试使用库而不是处理或创建大尺寸的集合视图。

【讨论】:

以上是关于UICollectionView 应用程序崩溃,在 iPhone 上显示大量图像的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 应用程序崩溃,在 iPhone 上显示大量图像

UICollectionView 部分标题崩溃 iOS 8

以编程方式添加 UICollectionView 时应用程序崩溃

iPhone 3GS 上的 iOS 6.0 上的 UICollectionView 崩溃

tvOS 11 更新 UICollectionView 崩溃

-[UICollectionView _endItemAnimations] 崩溃中的断言失败