4

UICollectionView を使用して、32 個のバッチで多くの画像を表示します。コレクション ビューの最後に到達するたびに、32 個の画像の別のバッチを読み込み、collectionView の contentsize.width のサイズを変更して、新しいアイテムを受け入れます。ロードは、AFNetworking で Web サービスを呼び出すことによって行われます。

最初から最後まで、そして最後から最初まで非常に速くスクロールすると、EXC_BAD_ACCESS を受け取ります。CollectionView の最後に到達したときにも発生しました。まだ利用できないいくつかの属性をロードしようとするようなものです。私は1日からそれを理解しようとしましたが、成功しませんでした。楽器/ NSZombieを有効にしてみました/ Guardmalloc ...

編集

非常に奇妙な考えもあります。この悪いアクセスは、PSTCollectionView を実際の UICollectionView に置き換えたときにのみ現れました。したがって、逆の動きをしてUICollectionViewをPSTCollectionViewに置き換えると、badaccessが消えたことを確認してください。私は完全に迷っています:)

編集終了

プロジェクトでアーク ファイルと非アーク ファイルの両方を使用しています。私が見つけることができる唯一の考えは、このスタックトレースです:ここに画像の説明を入力

あなたの助けは歓迎以上のものになります。

引用符

4

1 に答える 1

0

問題は、画像が大きすぎることかもしれません。各UIImageViewで画像プロパティを設定する前に、ダウンロードした画像から画像のサイズを変更することをお勧めします。

Bill Dudney は、このトピックに関する非常に役立つ iBook を発行しました。このトピックでは、画像がメモリに与える影響と、それを最適化する方法について詳しく説明しています。4.99ドルでとても助かります。

https://itunes.apple.com/us/book/all-image-io-you-need-to-know/id601759073?mt=11

次の方法では、画像のサイズを指定されたサイズに変更します。これにより、メモリ フットプリントが減少し、うまくいけば問題が回避されます。

- (UIImage *)resizeImage:(UIImage *)image size:(CGSize)size {
    UIGraphicsBeginImageContext(size);
    [image drawInRect: CGRectMake(0, 0, width, height)];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resizedImage;
}

AFNetworking カテゴリを使用して URL から直接画像を設定するために AFNetworking を使用している場合は、介入して画像のサイズを変更できる別の方法を使用することをお勧めします。以下のコードはそれを行います。

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:imageURL];
[request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

[imageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    // resize image
    // set image on imageView
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    // handle error
}];
于 2013-08-02T20:55:02.510 に答える