NSCache初始化用于存储ios UIImage

2023-12-04

我正在使用 NSCache 来存储图像。但这里的问题是一旦我在控制器之间切换, NSCache 就会清空。我希望这些项目至少在应用程序关闭或用户注销之前一直存在。 假设我有一个选项卡视图,并且我将数据中的图像存储在第一个选项卡中。当我转到第二个选项卡并切换回第一个选项卡时,NSCache 再次初始化。

这是我的代码:-

- (void)viewDidLoad {
[super viewDidLoad];
if(imageCache==nil)
{
    imageCache=[[NSCache alloc]init];
    NSLog(@"initialising");
}
[imageCache setEvictsObjectsWithDiscardedContent:NO];
}


(void) reloadMessages {

[Data getClassMessagesWithClassCode:_classObject.code successBlock:^(id object) {
    NSMutableArray *messagesArr = [[NSMutableArray alloc] init];
    for (PFObject *groupObject in object) {

        PFFile *file=[groupObject objectForKey:@"attachment"];
        NSString *url1=file.url;
        NSLog(@"%@ is url to the image",url1);
        UIImage *image = [imageCache objectForKey:url1];
        if(image)
        {
            NSLog(@"This is cached");

        }
        else{

            NSURL *imageURL = [NSURL URLWithString:url1];
            UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];

            if(image)
            {
                NSLog(@"Caching ....");
                [imageCache setObject:image forKey:url1];
            }

        }

    }

控件永远不会转到第一个 if 语句。我错过了什么吗?


@interface Sample : NSObject

+ (Sample*)sharedInstance;

// set
- (void)cacheImage:(UIImage*)image forKey:(NSString*)key;
// get
- (UIImage*)getCachedImageForKey:(NSString*)key;

@end

#import "Sample.h"

static Sample *sharedInstance;

@interface Sample ()
@property (nonatomic, strong) NSCache *imageCache;
@end

@implementation Sample

+ (Sample*)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[Sample alloc] init];
    });
    return sharedInstance;
}
- (instancetype)init {
    self = [super init];
    if (self) {
        self.imageCache = [[NSCache alloc] init];
    }
    return self;
}

- (void)cacheImage:(UIImage*)image forKey:(NSString*)key {
    [self.imageCache setObject:image forKey:key];
}

- (UIImage*)getCachedImageForKey:(NSString*)key {
    return [self.imageCache objectForKey:key];
}

在你的代码中:

UIImage *image = [[Sample sharedInstance] getCachedImageForKey:url1];
    if(image)
    {
        NSLog(@"This is cached");

    }
    else{

        NSURL *imageURL = [NSURL URLWithString:url1];
        UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];

        if(image)
        {
            NSLog(@"Caching ....");
            [[Sample sharedInstance] cacheImage:image forKey:url1];
        }

    }
  1. 如果应用程序进入后台,NSCache 将被清理。

  2. 你总是创建一个新的缓存,更好的方法是使用只有一个 NSCache 对象的sharedInstance。

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

NSCache初始化用于存储ios UIImage 的相关文章

  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行
  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • 确定 Objective-C 方法在运行时是否是可变的

    有没有办法在运行时找出给定方法是否是可变参数类型 就像是method getTypeEncoding 这不会告诉我一个方法是否接受可变数量的参数 或者有什么技巧可以告诉我们吗 罗伯特的评论是正确的 考虑 interface Boogity
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • SiriKit 错误:此应用程序不支持捐赠意图

    我在 Xcode 10 iOS 12 Beta 中捐赠自定义意图时遇到问题 我创建了一个在我的主应用程序目标和 OrderIntent 目标之间共享的自定义框架 我创建了一个 intentdefinition 文件 并将目标成员资格设置为我
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged

随机推荐

  • 使用 ruby​​ 和 active_record 保存时出现弃用警告

    我是 ruby 新手 正在编写一个需要将消息写入数据库日志的小脚本 我使用 ruby 1 9 3 和 active record 但没有 Rails 所有选择语句都工作正常 但我的写入日志函数返回以下错误 DEPRECATION WARNI
  • Python - 时间数据与格式不匹配

    我有以下格式的字符串时间 2016 12 10T13 54 15 294 我使用以下方法来格式化时间 time strptime ts b d H M S Y 这会引发错误 time data did not match format da
  • 使用 shell 变量查找具有多个文件名的 -name

    我有一个find命令查找名称与提到的多个模式匹配的文件 name范围 find L name SystemOut log o name out o name log o name javacore 这可以在命令行成功找到所需的文件 我正在寻
  • 如何管理 DOM 元素

    我已经实现了无限滚动 即当滚动条到达 div 底部时加载记录 它工作正常 但在页面上加载太多记录后 页面变得太重并导致渲染缓慢 实际上 我正在使用这种技术来替代 gridview 那么在这种情况下我如何管理繁重的 DOM 将 DOM 元素减
  • 使用带有 execve 的新路径来运行 ls 命令

    我正在尝试使用 execve 运行 ls 命令 目前我正在使用以下参数运行它 execve args 0 args env args args looks like ls l a NULL env args looks like PATH
  • 检查文件是否已保存到磁盘?

    我正在从服务器下载文件 将它们保存到设备 然后在我的应用程序中向用户显示它们 我想执行检查以查看该文件是否已存在于设备上 以便我们可以跳过下载并仅显示 但我无法找出执行此操作的最佳方法 我为每个文件创建一个唯一的文件名 然后将其转换为 NS
  • 如何使用 DataTable.Select() 解决文件管理器值中的单引号问题

    假设我想要productCode下面的变量被分配名为产品的产品代码Cookie s 注意其中的 ProductName因为它是导致下面的语句失败的原因 基本上 过滤表达式中的 会导致错误的 SQL 语法 我将不胜感激你们的任何想法 Data
  • 如何在 Zend Framework 2 中将数据库适配器设置为 Validator RecordExists

    我正在尝试将验证器 RecordExists 添加到我的表单中 但收到错误 不存在数据库适配器 如何将数据库适配器设置为此验证器 我使用骨架应用程序中的示例 我正在尝试执行类似的操作 是的 我知道 dbAdapter 未定义 我正在搜索如何
  • 无法手动将签名的 apk 安装到设备,出现错误“应用程序未安装”

    我想将我的应用程序发布到 GooglePlay 但首先我想使用签名的 apk 进行最后一次测试 以确保所有使用的 API 密钥都能在发布版本 GMaps Facebook 等 中正常工作 所以我只是使用我们的发布密钥制作了我的应用程序的签名
  • 获取全球ip地址

    我怎样才能得到 在C 中 global我的电脑的IP地址 Windows XP 你不能 您可以确定各个接口上的 IP 地址 并且可能有多个 这些可能是局域网 IP 10 0 0 0 8 192 168 0 0 16 等 也可能是 Inter
  • 如何使用 FFmpeg hstack 过滤器合成 2 个视频?

    我想通过并排将 2 个视频合成为 1 个视频 我还希望为每个视频设置开始 停止时间 最终视频应为 H264 AAC 编解码器和 mp4 格式 我附上了示例视频 https www dropbox com s e5eouyrrqsy44ts
  • iPhone X 中的导航栏问题? [复制]

    这个问题在这里已经有答案了 当我在 iPhone X 中运行该项目时 导航栏上方出现黑色空间 如图所示 但颜色没有相同 怎么解决这个问题呢 我想您没有使用故事板作为启动屏幕 有两个选项可以解决此问题 使用故事板作为启动屏幕 如果您使用启动图
  • 如何更新 Bitnami 堆栈中的 GitLab

    我在尝试BitNami GitLab 堆栈5 1 0 2 当我这样做的时候5 1 0 3被释放了 如何更新 Bitnami 堆栈中的 GitLab 相关带 LDAP 的 BitNami GitLab Stack 5 1 0 2 看这个 ht
  • 当我复制 laravel 项目并显示最后一个视图时出错

    我有一个 Laravel 5 3 项目 它是 5 个月前创建的 今天我复制了该项目 并对代码做了一些更改 当我编辑 Blade php 文件中的视图时 我编辑的项目向我显示了最后一个项目视图 我在新的 Laravel 项目中创建了一条新路线
  • 单击工具栏上的汉堡包图标不会打开导航抽屉

    我有这个导航抽屉工作得很好 重构我的代码我删除了所有onOptionsItemSelecteds在活动中并使所有活动继承自扩展的基本活动AppComplatActivity and 实施所有必要的方法 在此之后 即使我有 单击汉堡包图标也不
  • WPF DataGrid - 我可以使用属性装饰 POCO 以获得自定义列名称吗?

    我在 WPF 中有一个 DataGrid 并用如下数据填充它 public enum Sharing Equal SurfaceBased public class Data public bool Active get set publi
  • 无法通过反射调用带有 varargs 参数的方法 - NoSuchMethodException

    我正在尝试使用反射来调用带有可变参数的方法 并抓住了NoSuchMethodException 我不明白这里出了什么问题 Code public class ReflectionTest public ReflectionTest priv
  • SwiftUI 中的 @Binding 和 ForEach

    我不明白如何使用 Binding结合ForEach在 SwiftUI 中 假设我想创建一个列表Toggles 来自布尔数组 struct ContentView View State private var boolArr false fa
  • 将当前样式表保存到本地存储

    我知道有人问过这个问题 但没有一个帖子可以帮助我解决这个问题 所以 事情是这样的 我的网站上有两个样式表 我想将最近使用的样式表保存到本地存储 样式表之间的切换效果很好 这是我的代码 window onload function var c
  • NSCache初始化用于存储ios UIImage

    我正在使用 NSCache 来存储图像 但这里的问题是一旦我在控制器之间切换 NSCache 就会清空 我希望这些项目至少在应用程序关闭或用户注销之前一直存在 假设我有一个选项卡视图 并且我将数据中的图像存储在第一个选项卡中 当我转到第二个