Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AFNetworking图像缓存在内存警告时不为空

AFNetworking图像缓存在内存警告时不为空
EN

Stack Overflow用户
提问于 2014-02-03 16:02:12
回答 2查看 4.1K关注 0票数 8

我有一个图像处理应用程序,使用UIImageView+AFNetworking类别下载图像。

我注意到,随着我加载越来越多的图像,我的内存占用将继续增加。当我最终收到内存通知时,它没有释放任何内存,因此应用程序崩溃了。我对此的理解是,AFNetworking使用了一个名为AFImageCacheNSCache子类,它应该自己处理内存警告。链接1 链接2

使用一些脏的黑客,我手动清除了共享缓存中的所有对象,并且看到内存分配显著减少。如果不手动执行此调用,这种情况似乎永远不会发生。

我在一个简单的应用程序中复制了这个例子,该应用程序下载Imgur的首页并在一个简单的表视图中显示它。在上面,您可以看到为鼓掌所做的分配分析。

我试着删除任何花哨的东西,而且代码在某些地方很混乱。它不包括我的脏黑客,所以它只是死在内存警告。您可以看到应用程序这里

要使用该应用程序,您需要在imgur设置一个应用程序。

阅读github似乎表明,只要您为传入的NSURLRequest设置了适当的缓存策略,它就应该是足够的和完全自我维护的。我可能遗漏了什么,但我不确定我会设置什么缓存策略。这一切似乎都是为了记忆而重新抓取更改的图像,而不是清除。

我还认为lieven在这个问题中也提到了同样的问题,他说,除非设置totalCostLimit,否则缓存将无法自我清理。虽然我不相信在这种情况下使用仿真器与模拟内存警告相结合,但症状是一样的。

我很感谢你帮我调试这个

编辑

添加建议的代码后进行分析更新。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-03 16:05:54

AFNetworking的图像缓存使用NSCache,它可以清除整个系统的内存压力,而不是单个应用程序的内存警告。

为了解决这个问题,2. AFNetworking的X分支添加了以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidReceiveMemoryWarningNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * __unused notification) {
    [_af_defaultImageCache removeAllObjects];
}];

这将清除内存警告上的缓存。

如果您仍然在1.x分支上,则不包含此代码(UPDATE: --它是在此承诺中添加的),这可能会导致您看到的行为。您可以更新到2.x,也可以将这些代码添加到应用程序中。

只要您将适当的缓存策略设置为传入的NSURLRequest,它就应该是足够和完全自我维护的。

请注意,NSCache和NSURLCache是两个非常不同的类。NSCache是你在问题中要找的那个人。另一方面,NSURLCache只缓存对URL请求的响应。

UIImageView+AFNetworking使用NSCache存储UIImage对象。NSURLCache存储NSData对象,从这个缓存中检索对象通常不能满足在UITableView或UICollectionView中显示图像的图像处理应用程序的要求。

最后,您可能希望将您的实现与使用SDWebImage项目的实现进行比较。SDWebImage提供磁盘和内存缓存,并且比AFNetworking的UIImageView+AFNetworking更能控制细节。

票数 11
EN

Stack Overflow用户

发布于 2014-08-20 17:02:44

AFNetworking现在已经将此修复提交到其1.x分支和2.x分支。不再需要升级到AFNetworking 2.x来解决这个问题。您也不再需要编辑UIImageView+AFNetworking.m了。

以下是提交:https://github.com/AFNetworking/AFNetworking/commit/66a29256ed0724e8c9033ee4847e1f09f800ce42#diff-d41d8cd98f00b204e9800998ecf8427e

您可以在这里看到该文件的固定版本:https://github.com/AFNetworking/AFNetworking/blob/1.x/AFNetworking/UIImageView%2BAFNetworking.m

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21540399

复制
相关文章
bootstrap 表单验证 不为空验证
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <link href="css/bootstrapValidator.min.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/bootstrapValidator.min.js"></script> </head> <body>  <form role="form"> <div class="form-group"> <label>Username</label> <input type="text" class="form-control" name="username" /> </div> <div class="form-group"> <label>Email address</label> <input type="text" class="form-control" name="email" /> </div> <div class="form-group"> <button type="submit" name="submit" class="btn btn-primary">Submit</button> </div> </form> <script>
用户5760343
2019/07/07
8.7K0
AFNetWorking用法及缓存处理
AFNetWorking 在IOS开发中是一个经常会用的第三方开源库,其最好处是维护及时,源码开源。
用户7705674
2021/10/29
5130
怎么判断map不为空「建议收藏」
这里是用isEmpty()方法来做判断,其实和map.size()也没差,可以看下isEmpty()方法的源码:
全栈程序员站长
2022/09/07
2.4K0
关于内存警告
UIKIT_EXTERN NSString *const UIApplicationDidReceiveMemoryWarningNotification;
全栈程序员站长
2022/07/08
7090
AFNetWorking用法及缓存处理 原
AFNetWorking 在IOS开发中是一个经常会用的第三方开源库,其最好处是维护及时,源码开源。
珲少
2018/08/15
6010
使用python时注意的内存、缓存问题
1. 在使用python时,常常会出现Memory Error,主要是由于python不会自动回收内存,造成内存一直占用,可以采取手动释放内存的方法,详见http://blog.csdn.net/nirendao/article/details/44426201/。
py3study
2020/01/09
2K0
Mybatis中判断集合的 size 不为空
Mybatis中判断集合的size, 可以用下面的方法来做。 <if test="null != staffCodeList and staffCodeList.size > 0"> and gui.USER_CODE not in <foreach collection="staffCodeList" item="staffCode" open="(" separator="," close=")"> #{staffCode} </foreach> </if>
一个会写诗的程序员
2020/04/30
4.9K0
Java判断不为空的工具类总结
1、Java判断是否为空的工具类,可以直接使用。包含,String字符串,数组,集合等等。
别先生
2018/08/09
5K0
go中interface空指针不为nil判断方法
当把一个空指针对象赋值给一个interface后,再判断!= nil就不再成立了 代码如下
雪山飞猪
2019/08/29
2.4K0
验证多个class相同的input框不为空
要求,页面有多个class相同的input输入框,在提交数据的时候,进行验证,验证input框不能为空,如果哪个为空,则弹出提示:
王小婷
2020/05/26
1.8K0
验证多个class相同的input框不为空
AFNetworking的header设置几个不为人知的配置方法
AFNetworking中最常用的就是POST和GET请求,但是可能很多人都不知道,这个强大的框架还可以配置HTTPHeader 首先看一下我们常用的方法 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFJSONResponseSerializer new]; [manager POST:url parameters:par
rectinajh
2018/05/17
2K0
xml 里面判断int类型,String类型不为空
目录 1 int类型 2 String类型 1 int类型 <if test="status != null"> and c.status = #{status} </if> 则0和1都可以 所以数字判断的时候,应该是只要判断非空就可以。 2 String类型 <if test="status != null and status != ''"> and c.status = #{status} </if>
一写代码就开心
2022/08/14
1.9K0
在 MSBuild 编译项目时阻止输出所有的警告信息
大型旧项目可能存在大量的 Warning,在编译之后 Visual Studio 会给出大量的警告。Visual Studio 中可以直接点掉警告,然而如果是通过命令行 msbuild 编译的,那如何不要让警告输出呢?
walterlv
2020/02/10
1.4K0
AFNetworking框架_上传文件或图像server
– (void)uploadImageWithImage:(NSString *)imagePath
全栈程序员站长
2022/07/06
5150
java怎么判断对象不为空_java判断对象是否为空的方法
这篇文章将为大家详细讲解有关java判断对象是否为空的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
全栈程序员站长
2022/09/07
4.9K0
一日一技:在Python里面判断多个变量全部/任意不为空
我们在写Python 函数的时候,可能会需要判断传入的多个参数是否同时为空/None/False,或者是否有任何一个不为空/None/False。可能有人会这样写:
青南
2019/05/09
6.8K0
Caffeine缓存 最快缓存 内存缓存
Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存。使用Caffeine后无需使用Guava Cache,从并发的角度来讲,Caffeine明显优于Guava,原因是使用了Java 8最新的StampedLock锁技术。
赛先生和泰先生
2022/01/21
3K0
Caffeine缓存 最快缓存 内存缓存
当仓库不为空、从gitee远程仓库拉取
1.从gitee远程仓库拉取
2020/10/23
1.1K0
当仓库不为空、从gitee远程仓库拉取
CDH内存调拨过度警告分析
Hadoop应用程序或者Yarn的作业随机的出现OutOfMemory(OOM),在Cloudera Manager界面显示如下警告:
Fayson
2018/03/30
8K0
在Linux上清除内存缓存的方法命令
默认情况下,每个Linux操作系统都有一个高效的内存管理系统,该系统用于定期清除缓冲区高速缓存。您可以使用以下简单命令手动释放内存缓存:
用户5005176
2021/09/08
4.1K0

相似问题

AFNetworking +多个图像视图=崩溃->收到内存警告

13

使用AFNetworking下载多个文件时收到内存警告

21

使用AFNetworking下载文件时的内存警告

42

基于AFNetworking的图像缓存

12

AFNetworking框架:如何缓存图像

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文