源码:http://files.cnblogs.com/ios8/ASIHttpRequestDemo2.zip

NSURL *url = [NSURLURLWithString:@"http://pica.nipic.com/2007-12-12/20071212235955316_2.jpg"];

ASIFormDataRequest *request = [ASIFormDataRequestrequestWithURL:url];//创建数据请求对象

[request setRequestMethod:@"GET"];

[request setTimeOutSeconds:60];

//    [request setDelegate:self];//设置代理

//    设置缓存--

ASIDownloadCache *cache = [[ASIDownloadCachealloc]init];//创建缓存对象

NSString *cachePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]; //设置缓存目录,这里设置沙盒目录下的Documents目录作为缓存目录

NSLog(@"cachepath:%@",cachePath);

[cache setStoragePath:cachePath];

cache.defaultCachePolicy =ASIOnlyLoadIfNotCachedCachePolicy; //设置缓存策略

//每次请求会将上一次的请求缓存文件清除

//    request.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;

//持久缓存,一直保存在本地(是持久缓存,程序下次启动,缓存仍然还在)

request.cacheStoragePolicy =ASICachePermanentlyCacheStoragePolicy;

request.downloadCache = cache;

[request startAsynchronous];//发送异步请求

//设置网络请求完成后调用的block

[request setCompletionBlock:^{

//         NSLog(@"%@",request.responseHeaders);

NSData *data = request.responseData;

self.showImageView.image = [UIImageimageWithData:data];

//---------------判断数据的来源:网络 or缓存------------------

if (request.didUseCachedResponse) {

NSLog(@"数据来自缓存");

} else {

NSLog(@"数据来自网络");

}

}];

//请求失败调用的block

[request setFailedBlock:^{

NSError *error = request.error;

NSLog(@"请求网络出错:%@",error);

}];

 

在 NSData *data = request.responseData;这一行报警告:::Capturing \'request\'

 

strongly in this block is likely to lead to a retain cycle..........

 

先开始我想应该是内存管理的问题,后来想自己使用了arc应该不存在这个问题吧。。后

来朋友说,block里面不能使用自己自定义的属性,因为block是独立的。。网上查了一下

关于block的使用问题,看的懵懵懂懂不太明白,没有理解。。。。没有明白。。这个和

我的程序死掉有什么关系??我写的代码,

点击打开链接这个网站的写的......

嗯,现在我把设置缓存的代码注释掉了,程序就可以了。。。这个跟缓存有关么?

 
------------------------------------------------------------------------
 
---------------------------------------
 
点击打开链接   使用ASIHTTPRequest和ASIDownloadCache实现本地缓存
 
 
好啦,这个问题是设置缓存的问题。。

ViewController.m

 

@interface ViewController (){

ASIDownloadCache *myCache;

}

 
修改缓存的代码:
 

//    设置缓存--

ASIDownloadCache *cache = [[ASIDownloadCachealloc]init];//创建缓存对象

myCache = cache;

//路径

NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *documentDirectory = [pathsobjectAtIndex:0];

NSLog(@"path-%@",documentDirectory);

//设置缓存存放路径

[myCachesetStoragePath:[documentDirectorystringByAppendingPathComponent:@"pic"]];

myCache.defaultCachePolicy =ASIOnlyLoadIfNotCachedCachePolicy; //设置缓存策略

//每次请求会将上一次的请求缓存文件清除

//    request.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;

//持久缓存,一直保存在本地(是持久缓存,程序下次启动,缓存仍然还在)

request.cacheStoragePolicy =ASICachePermanentlyCacheStoragePolicy;

request.downloadCache = cache;

-----------------

打印了路径,前往文件夹,输入路径,就的到以下图示:

使用ASIHTTPRequest和ASIDownloadCache实现本地缓存的更多相关文章

  1. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

  2. 微信小程序之本地缓存(十)

    [未经作者本人同意,请勿以任何形式转载] 目前,微信给每个小程序提供了10M的本地缓存空间(哎哟妈呀好大) 有了本地缓存,你的小程序可以做到: 离线应用(已测试在无网络的情况下,可以操作缓存数据) 流 ...

  3. HTML5本地缓存数据

    //HTML5本地缓存数据 function putObj(key, data) { if (!!window.localStorage) { var obj = { "key": ...

  4. iOS //清除本地缓存

    //清除本地缓存 -(void)clearCache{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT ...

  5. Java8简单的本地缓存实现

    原文出处:lukaseder         Java8简单的本地缓存实现 这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在 ...

  6. Java学习之ConcurrentHashMap实现一个本地缓存

    ConcurrentHashMap融合了Hashtable和HashMap二者的优势. Hashtable是做了线程同步,HashMap未考虑同步.所以HashMap在单线程下效率较高,Hashtab ...

  7. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  8. OutputCache 如何使用本地缓存 【转】

    注意!ASP.NET MVC 3 的一个 OutputCache 问题   在用 ASP.NET MVC 3 重写博客园网站首页时,特地留意了一下这个缓存问题,通过这篇博文分享一下. 在 ASP.NE ...

  9. 如何查看与刷新DNS本地缓存

    如何查看与刷新DNS本地缓存 一.查看DNS本地缓存 在cmd窗口输入:ipconfig/displaydns 二.刷新DNS本地缓存 在cmd窗口输入:ipconfig/flushdns 之后输入: ...

随机推荐

  1. 一次dns缓存引发的慘案

    时间2015年的某个周六凌晨5点,公司官方的QQ群实用户反馈官网打不开了,但有的用户反馈能够打开.客服爬起来自己用电脑试了一下没有问题,就给客户反馈说.可能是自己网络的问题,请过会在试试.早点8点,越 ...

  2. jqPlot图表插件学习之ajax-json数据加载

    一.准备工作 首先我们需要到官网下载所需的文件: 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载 ...

  3. 如何使用 MSBuild.exe 生成解决方案中的特定目标

    以前都是直接使用VS或者msbuild生成整个解决方案,或者只构建单个工程. 这回使用msbuild构建单个工程的时候出现了问题,因为工程中使用了SolutionDir这个宏来定位第三方库路径. 对于 ...

  4. 转:关于 OGRE 与 OSG 的简单比较

    1   前言 我曾经细致阅读过 OGRE 和 OSG 官方提供的文档,有<Pro OGRE 3D Programming>.OGRE自带手册(manual).王锐老师等翻译的<Ope ...

  5. 【php+js】用PHP或者JS怎么显示搜索到的关键字高亮,及其文章里包含关键字的一小段

    1.想要实现的效果: 2.思路:小数据量使用 php的正则替换,即[preg_replace()]函数 -->> 支持多个关键词高亮显示,中间参数1和参数2放入对应的数组即可. $titl ...

  6. Mac巧用AirDrop实现大文件传输

    最近想更新一下Xcode8.3,无奈资源太大,不想一点点下载了,公司服务器上正好有官网下载好的,就想直接拿过来使用,本来想通过QQ传输的,无奈发现QQ传输提示资源过大. 于是就想到了这货:AirDro ...

  7. hihocoder第233周

    题目链接 题目描述 给定一个数组a[N],N小于1e5.把数组划分成若干个片段,每个片段的和都不为0,问有多少种划分方法? 方法描述 定义f(i)表示0~i共有多少种划分方式,则$f(j)=\sum_ ...

  8. MATLAB 的函数

    [需要注意]MATLAB函数不能先定义后调用! 如下为先定义后调用,结果报错: 错误: 文件:justTest2.m 行:88 列:5脚本中的函数定义必须出现在文件的结尾.请将 "mymax ...

  9. coreData详解

    1.初识CoreData CoreData的结构构成: NSManagedObjectModel的构成: 可以通过Entity创建继承自NSManagedObject类的文件,这个文件就是开发中使用的 ...

  10. 【DeepLearning】Exercise:Softmax Regression

    Exercise:Softmax Regression 习题的链接:Exercise:Softmax Regression softmaxCost.m function [cost, grad] = ...