Ich weiß, dies ist ein sehr altes Thema, aber vor kurzem hatte ich eine Menge von zufälligen Abstürzen mit SDWebImage, so musste ich meine eigenen Lazy Loading und Caching-Mechanismus zu implementieren. Es funktioniert ziemlich gut, ich habe es nur nicht in schweren Lastfällen getestet. Hier sind die .h und .m Dateien, gefolgt von der Art und Weise, wie ich es benutze:
// UIImageView+CustomCache.h
@interface UIImageView(CustomCache)
-(void)startAsyncDownload:(UIImage*)placeHolderImage imageUrlString:(NSString*)imageUrlString;
@end
// UIImageView+CustomCache.m
#import "UIImageView+CustomCache.h"
@implementation UIImageView(CustomCache)
-(void)startAsyncDownload:(UIImage*)placeHolderImage imageUrlString:(NSString*)imageUrlString{
self.image = placeHolderImage;
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:
[NSURL URLWithString:imageUrlString]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionHandler){
@autoreleasepool {
if (connectionHandler != nil) {
NSLog(@"error in downloading description %@",connectionHandler.localizedDescription);
} else {
ImagesCacheHandler *ref = [ImagesCacheHandler new];
UIImage *imageFromData = [[UIImage alloc] initWithData:data];
if (imageFromData != NULL && imageFromData != nil && data.length > 0) {
self.image = imageFromData;
//custom store to sqlite
[ref archiveImage:imageUrlString imageData:data moc:[ref fetchContext]];
}
}
}
}];
}
@end
Und in meiner Tabelle Ansicht ich verwenden (ich importieren natürlich UIImageView+CustomCache.h)
UIImageView *imageViewToLazyLoad = (UIImageView*)[cell viewWithTag:1];
[imageViewToLazyLoad startAsyncDownload:[UIImage imageNamed@"palce_Holder_Image_name"] imageUrlString:imageUrl];