缓存 URL 图像 iphone UITableview

2023-11-21

我正在寻找有关如何将从 url 加载的图像缓存到 uitableview 单元格中的教程。

我在这里找到了一个例子

http://www.ericd.net/2009/05/iphone-caching-images-in-memory.html#top

但代码不完整。我是一个客观的c 新手,所以我发现填补缺失的部分非常困难。


这是一个使用 NSCache 的简单图像缓存实现。 ImageCache 是一个单例。

图像缓存.h

    #import <Foundation/Foundation.h>

    @interface ImageCache : NSObject

    @property (nonatomic, retain) NSCache *imgCache;


    #pragma mark - Methods

    + (ImageCache*)sharedImageCache;
    //- (void) AddImage:(NSString *)imageURL: (UIImage *)image;
   - (void) AddImage:(NSString *)imageURL withImage:(UIImage *)image;
    - (UIImage*) GetImage:(NSString *)imageURL;
    - (BOOL) DoesExist:(NSString *)imageURL;

    @end

图像缓存.m

  #import "ImageCache.h"

    @implementation ImageCache

    @synthesize imgCache;

    #pragma mark - Methods

    static ImageCache* sharedImageCache = nil;

    +(ImageCache*)sharedImageCache
    {
        @synchronized([ImageCache class])
        {
            if (!sharedImageCache)
                sharedImageCache= [[self alloc] init];

            return sharedImageCache;
        }

        return nil;
    }

    +(id)alloc
    {
        @synchronized([ImageCache class])
        {
            NSAssert(sharedImageCache == nil, @"Attempted to allocate a second instance of a singleton.");
            sharedImageCache = [super alloc];

            return sharedImageCache;
        }

        return nil;
    }

    -(id)init 
    {
        self = [super init];
        if (self != nil) 
        {
            imgCache = [[NSCache alloc] init];
        }

        return self;
    }

   // - (void) AddImage:(NSString *)imageURL: (UIImage *)image
- (void) AddImage:(NSString *)imageURL withImage:(UIImage *)image
    {
        [imgCache setObject:image forKey:imageURL];
    }

    - (NSString*) GetImage:(NSString *)imageURL
    {
        return [imgCache objectForKey:imageURL];
    }

    - (BOOL) DoesExist:(NSString *)imageURL
    {
        if ([imgCache objectForKey:imageURL] == nil)
        {
            return false;
        }

        return true;
    }


    @end

Example

UIImage *image;

    // 1. Check the image cache to see if the image already exists. If so, then use it. If not, then download it.

    if ([[ImageCache sharedImageCache] DoesExist:imgUrl] == true)
    {
        image = [[ImageCache sharedImageCache] GetImage:imgUrl];
    }
    else
    {
        NSData *imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: imgUrl]];
        image = [[UIImage alloc] initWithData:imageData];

        // Add the image to the cache 
        //[[ImageCache sharedImageCache] AddImage:imgUrl :image];

        [[ImageCache sharedImageCache] AddImage:imgUrl withImage:image];
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存 URL 图像 iphone UITableview 的相关文章

随机推荐

  • 使用 MySQL 查找最近的重复 ID

    我用来做 SELECT email COUNT email AS occurences FROM wineries GROUP BY email HAVING COUNT email gt 1 根据他们的电子邮件查找重复项 但现在我需要他们
  • Excel - 将 JavaScript/Unix 时间戳转换为日期

    我想知道如何在 Excel 中将时间戳转换为日期 JavaScript 时间戳 1486812409161 Unix时间戳 1486812409 Excel 函数 公式可以转换为以下内容 2 11 2017 11 26 AM 或任何人类可读
  • java中双精度乘法的精度?

    java中双精度值的乘法运算符的保证精度是多少 例如 2 2 100 是 220 00000000000003 但 220 是双精度数 220 00000000000003 是 220 之后的下一个双精度值 乘法工作正常 但是2 2不能精确
  • SwipeRefreshLayout setRefreshing() 最初不显示指示器

    我有一个非常简单的布局 但是当我打电话时setRefreshing true in onActivityCreated 我的片段 它最初没有显示 它仅在我进行拉动刷新时显示 有什么想法为什么它最初没有出现吗 片段 xml
  • Weak_ptr 如何知道共享资源已过期?

    考虑以下代码 include
  • 源代码控制 - 如果、为什么、如何开始? [复制]

    这个问题在这里已经有答案了 可能的重复 使用源代码管理 因此 尽管 Stack Overflow 上确实有几十个关于版本控制的内容 但我找不到好东西来回答我的所有问题 如果您有任何话要说或发布链接 请在此处进行 1 需要从版本控制入手吗 虽
  • 基于要在 MSBUILD 中使用的用户定义目录创建 wix 片段文件的最佳方法

    本着 Si 提出这个问题的精神 WiX 技巧和技巧 我正在尝试确定基于目录创建 wix 片段的最佳方法 可以这么说 文件收获 例如 在 bin release 文件夹下 我可以有许多不同的文件夹以及我想在片段中轻松捕获的文件 我一直通过输入
  • Android Systrace 跟踪文件格式

    Android systrace工具 调用atrace通过亚行工具 但是 我不太了解跟踪文件的格式 显然它与linux非常相似ftrace工具有一些差异 主要区别在于它不使用系统映射文件 但它将所有信息包含到跟踪文件中 此外 还有 Andr
  • 从 php 脚本运行 git pull

    我正在尝试完美的工作流程 使用 Git GitHub 和 SSH 除了运行命令之外 我已经设置好了一切git pull来自 PHP 当我跑步时exec git pull i get 无法创建目录 ssh 主机密钥验证失败 fatal 远端意
  • 为什么HashMap的初始容量是16(2的幂)而Hashtable的初始容量是11(素数)?

    如果您知道请描述原因 我用谷歌搜索 但没有找到解释清楚的答案 是为了当你的时候使桶的索引为正吗hashCode是负数吗 For HashMap 存储 Map 条目的数组中的索引是这样计算的 其中h计算自hashCode的密钥 static
  • PyQt 中支持拖放的 QTreeView

    在 PyQt 4 中 我想创建一个 QTreeView 可以通过拖放操作重新组织其结构 我已经为 QTreeView 实现了自己的模型 QAbstractItemModel 因此我的 QTreeView 可以正确显示数据 现在我想添加对树节
  • 查找所选顶点的最小生成树的算法

    人们可以使用 Prim 算法或 Kruskal 算法来查找顶点 节点和边 链接集合的最小生成树 图 不过 我想要的是一种找到该集合的最小生成图的算法 但生成的图需要仅包含任意选择的节点 而不是所有节点 如果结果图包含的节点多于所需的节点也没
  • 如何在 ActiveAdmin 中添加返回应用程序的链接?

    我需要在 ActiveAdmin 页面中添加一些指向应用程序某些页面的链接 我可以使用侧边栏来完成此操作 但我必须为每个资源重复代码 无论如何 是否可以向标题添加自定义链接 或者定义一个针对所有资源显示的侧边栏 我也不想忽略在initial
  • 奇怪的 Maven 内存不足错误

    我目前正在尝试使用 hudson 调用 Maven 来构建我的项目 我不断遇到内存不足错误的问题 我在所有环境变量 hudson 配置和 hudson 项目配置中设置了 xmx 和 xms 我将 xmx 设置为 1500 mb 这应该足够了
  • java中的对象有内存大小限制吗?

    我们可以拥有任意大小的 Java 对象而不用担心异常吗 我将使用一个类的对象 该类包含一个ArrayList数千个其他对象 其中包含几个HashMaps and ArrayLists 和许多其他非原始类型 谢谢 如果你有一个对象 我们称之为
  • 使用 devtools 构建 .md vignette

    我在用着knitr rmarkdown but knitr knitr和我的一样 VignetteEngine 然后我使用构建我的包小插图devtools build vignettes 这可行 但只能在以下位置创建 HTML 和 R 输出
  • IE Date.parse 方法对于带有时间字符串的日期返回 NaN

    我们正在尝试用时间戳字符串解析日期 它在 IE 中崩溃 但在 FireFox 中工作正常 这是代码 警报 新日期 Date parse 2010 01 31T12 00 00 233467 05 00 有什么办法让它在 IE 浏览器中工作吗
  • 使用sbt编译Java注解

    我已经在下面创建了 Java 注释 因为我需要运行时保留 PROJECT src main java我的 scala 代码使用了这些 java 注释 PROJECT src main scala 这样创建的 Java 注释也使用 Java
  • ListView 布局与 RTL 语言(阿拉伯语)渲染不一致

    我有简单的 ListView 和 ArrayAdapter 正在工作正好 问题始于RTL语言 在本例中为阿拉伯语 当你第一次打开它时 一切看起来都很好 但向下滚动并向后滚动后 某些项目似乎渲染不正确 代码很简单 请注意 如果我不重复使用视图
  • 缓存 URL 图像 iphone UITableview

    我正在寻找有关如何将从 url 加载的图像缓存到 uitableview 单元格中的教程 我在这里找到了一个例子 http www ericd net 2009 05 iphone caching images in memory html