Ios 需要使用缓冲区保存和检索UIImage

Ios 需要使用缓冲区保存和检索UIImage,ios,objective-c,uiimage,nscache,Ios,Objective C,Uiimage,Nscache,我的应用程序是一种图片库。当用户点击图库中的图标时,需要显示图像(横向2图像,纵向1图像)。图片可能超过100张。我通常把原始文件解码成UIImage格式。如果用户想看到另一幅图像,由于解码的原因,显示图像需要一些时间(延迟)。所以我想将一些图像保存到单独线程(GCD)中的缓存(NSArray)中,以解决这个问题 在阵列中,我可以存储5到10个图像。每次用户刷卡时都需要更新 请给出建议 提前谢谢 你可以使用苹果的 此代码将在后台下载图像,并在下载完成时设置为imageview。您可以添加占位符图

我的应用程序是一种图片库。当用户点击图库中的图标时,需要显示图像(横向2图像,纵向1图像)。图片可能超过100张。我通常把原始文件解码成UIImage格式。如果用户想看到另一幅图像,由于解码的原因,显示图像需要一些时间(延迟)。所以我想将一些图像保存到单独线程(GCD)中的缓存(NSArray)中,以解决这个问题

在阵列中,我可以存储5到10个图像。每次用户刷卡时都需要更新

请给出建议

提前谢谢

你可以使用苹果的

此代码将在后台下载图像,并在下载完成时设置为imageview。您可以添加占位符图像,直到原始图像处于下载过程中

我在许多应用程序中使用了这个示例,所以如果您需要,我也可以帮助您实现

希望这对你有帮助。

试试这个-

    UIImage *image = [imageCache objectForKey:@"myImage"];
    if (!image)
    {
      // download image
      dispatch_async(dispatch_get_global_queue(0, 0), ^{
      NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:yourURL]];
      if (imageData)
      {
        // Set image to cache
        [imageCache setObject: [UIImage imageWithData:imageData] forKey:@"myImage"];
        dispatch_async(dispatch_get_main_queue(), ^{
        [yourImageView setImage:[UIImage imageWithData:imageData]];
       });
      }
    });
 }
 else
 {
   // Use image from cache
   [yourImageView setImage:image];
 }

我已经使用GCD实现了NSCache

dispatch_async(dispatch_get_global_queue(0, 0), ^{

    [self storeInCache];

       dispatch_async(dispatch_get_main_queue(), ^{

          UIImage *image=[_imageCache objectForKey:@"P5"];
          self.imageView = [[UIImageView alloc] initWithImage:image];
          self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size};
          [self.scrollView addSubview:self.imageView];
          self.scrollView.contentSize = image.size;
     });
       });
//将5个图像存储到NSCache中

-(void)storeInCache
{

UIImage *image = [UIImage imageNamed:@"photo1.png"];
[_imageCache setObject:image forKey:@"P1"];

UIImage *image2 = [UIImage imageNamed:@"photo2.png"];
[_imageCache setObject:image2 forKey:@"P2"];

UIImage *image3 = [UIImage imageNamed:@"photo3.png"];
[_imageCache setObject:image3 forKey:@"P3"];

UIImage *image4 = [UIImage imageNamed:@"photo4.png"];
[_imageCache setObject:image4 forKey:@"P4"];

UIImage *image5 = [UIImage imageNamed:@"photo5.png"];
[_imageCache setObject:image5 forKey:@"P5"];

}

谢谢兄弟的回复。1) 延迟不是在下载时,而是在解码时(从其他格式到UIImage格式)。2) 对于imageCache,哪一个是好的(NSArray或NSMutable Array或任何其他)感谢您的保证bro。它是否适用于高分辨率图像?您应该使用NSCache进行内存缓存,或者也可以研究使用磁盘缓存的解决方案。有很多用于图像的缓存实现。谢谢Andy。我也会这样做。如果可能,请提供一些链接以供参考。@Andy再次感谢。按照您的建议实现了NSCache。很好,很棒,很简单,对吧?!对易于实现