UICollectionView App崩溃,在iPhone上显示大量图像

时间:2013-03-19 05:45:29

标签: ios sdk uiimageview uicollectionview

我需要在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];

    }

2 个答案:

答案 0 :(得分:1)

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

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

您可以使用这个精彩的图片下载和缓存库:SDWebImage

答案 1 :(得分:-1)

图库中有专门的库。您应该尝试使用库而不是处理或创建大尺寸的集合视图。