由于近期使用NSURLConnection来请求登录ip地址与端口号出现问题,特来记录下。
问题描述:
今天我们家app换了ip地址和端口号,发现app登录的还是原来的地址和端口号,期初我还不信还在质疑后台小伙伴的问题,是不是后台的工作人员太菜了导致的,最后我发现是我太菜,iOS会在沙盒中做一个http请求的缓存。
闲话少续上问题代码:
NSURL *url = [NSURL URLWithString:@"http://www.vomont.com/veye/addr.htm"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSDictionary *ipandport = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
ip = ipandport[@"ip"];//@"192.168.0.185";
port = [ipandport[@"port"] intValue];
这段优雅的代码描述了NSURLConnection的基本用法,但是当我在调试的时候发现服务器ip修改了,我这TM的还是上一次的ip地址,我的查找思路是从缓存入手看看是否有缓存机制,看了一眼沙盒,妈蛋这是什么
没错这就是问题,cache.db就是我们要解决的问题
解决cache.db
使用AFNetworking 、 SDWebImage 等等开源库做网络数据缓存的时候要注意可能会出现重复缓存(因为NSURLCache已经做了一次缓存,存在Disk中 !
- 使用 NSURLConnect,、UIWebView 。。 的都会使用导 NSURLCache 的缓存
- 当使用 NSURL 相关的框架,使用到缓存的时候,系统会在 Caches目录下创建一个 跟 bundle identifer 同名的一个文件夹,以及里面的 Cache.db、Cache.db-shm、Cache.db-wal
三个文件和文件夹 fsCacheData/
·fsCacheData/ 文件夹会在有需要缓存数据到文件的数据才会有,如缓存图片 - 可以使用
[[NSURLCache sharedURLCache]removeAllCachedResponses]
清理这里所有的缓存数据。