0

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];

    }
4

2 に答える 2

1

あなたは間違ったアプローチを取っています。あなたがすべきことは、その数の画像(CollectionViewの可視セルの数に相当)だけを一度にダウンロードすることです。

コレクション ビューがスクロールされると、より多くの画像をダウンロードし、キャッシュ内の以前の画像を消去または保存します。

この素晴らしい画像ダウンロードおよびキャッシュ ライブラリを利用できます: SDWebImage

于 2013-03-19T05:47:47.200 に答える
0

ギャラリーで利用できる特別なライブラリがあります。大きなサイズのコレクションビューを処理または作成するのではなく、ライブラリを試す必要があります。

于 2017-09-11T12:14:55.087 に答える