iOS:SDWebImageManager不缓存图像

时间:2015-06-13 12:43:46

标签: objective-c caching uiimageview slideshow sdwebimage

我正在使用UIImageView制作幻灯片,并且图片链接在一个数组中,所以当我参与其中时,我了解到SDWebImageManager只允许点击一次网址然后它会缓存图像供以后使用。

但是我在我的应用中监控的是第一张图片是缓存的,我相信,但第二张图片网址总是被点击。

这是我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    arry = [[NSMutableArray alloc] init];
    [arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6291.jpg"];
    [arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6290.jpg"];

    NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:0]];

    __block UIActivityIndicatorView *activityIndicator;
    __weak UIImageView *weakImageView = self.imageView;
    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    [manager downloadImageWithURL:imageURL
                      options:0
                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                         // progression tracking code
                         if (!activityIndicator) {
                             [weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
                             //activityIndicator.center = self.imageView.center;
                             [activityIndicator startAnimating];
                         }
                     }
                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                        if (image) {
                            // do something with image
                            [activityIndicator removeFromSuperview];
                            activityIndicator = nil;
                            [self.imageView setImage:image];
                        }
                    }];

//Timer to do slideshow for images
timer = [NSTimer scheduledTimerWithTimeInterval: 5.0
                                             target: self
                                           selector: @selector(handleTimer:)
                                           userInfo: nil
                                            repeats: YES];
}

这里是handleTimer代码,每隔5秒在图片视图中重新加载图片:

-(void) handleTimer: (NSTimer *) timer {

        currentImage++;
        if ( currentImage >= arry.count )
            currentImage = 0;

        __block UIActivityIndicatorView *activityIndicator;
        __weak UIImageView *weakImageView = self.imageView;
        SDWebImageManager *manager = [SDWebImageManager sharedManager];
        [manager downloadImageWithURL:imageURL
                      options:0
                     progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                         // progression tracking code
                         if (!activityIndicator) {
                             [weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
                             //activityIndicator.center = self.imageView.center;
                             [activityIndicator startAnimating];
                         }
                     }
                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
                        if (image) {
                            // do something with image
                            [activityIndicator removeFromSuperview];
                            activityIndicator = nil;
                            [self.imageView setImage:image];
                        }
                    }];
}

我在这里监控网络使用情况: enter image description here

如果我错误地使用了SDWebImageManager,请引导我。

由于

1 个答案:

答案 0 :(得分:0)

我的母语是中文,而不是英文。也许我无法清楚地表达自己的想法,而我会尽力告诉我的想法。如果我迷惑你,我会感到抱歉。

我无法播放SDWebimage因为我的国家有时会阻止谷歌,所以我无法重现你的场景。虽然我仍然给你一些可能对你有帮助的建议

首先,您给了我们一些上下文。也许您可以发布有关成员变量和属性的更多信息。当我将您的代码复制到Xcode时。我需要自己添加它们。

其次,你的意思是你使用左     NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:1]];,

sdwebimage每次都会点击网址,而不是使用缓存网址?你可以通过NSLog获取cacheType的图像源。

completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {  
                      if (image) {                                                    
                            NSLog(@"%d",cacheType);
                          [activityIndicator removeFromSuperview];
                          activityIndicator = nil;
                          [self.imageView setImage:image];
                     }
                  }];`

SDImageCacheTypeNone表示图像来自网络。

SDImageCacheTypeDisk表示图像来自磁盘。

SDImageCacheTypeMemory表示图像来自内存。

第三,因为downloadWithURL:options:completed:不在主线程上。我怀疑这个序列与你的想法是一样的。