//
// UIImageView+CacheURL.m
// Vodka
//
// Created by xiaoming on 15/11/5.
// Copyright © 2015年 Beijing Beast Technology Co.,Ltd. All rights reserved.
//
#import "UIImageView+CacheURL.h"
#import "CodeFragments.h"
@implementation UIImageView (CacheURL)
#pragma mark - 传人urlString 和默认图。获取网络图片。----不放到缓存里面
-(void)setURLString:(NSString *)urlString placeholderImage:(UIImage *)image{
[selfsetURLString:urlString placeholderImage:image relativePath:nil];
}
#pragma mark - 传人urlString 和默认图。获取网络图片。----不放到缓存里面 relativePath 传 nil @"" 跟上面的方法一样,都是 tempCache 路径下。
-(void)setURLString:(NSString *)urlString placeholderImage:(UIImage *)defaultImage relativePath:(NSString *)relativePath{
if (relativePath == nil || [relativePath isEqualToString:@""]) {
relativePath = @"tempCache";
}
self.image = defaultImage;
if ([self isEmptyString:urlString]) {
return;
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *resultImage = nil;///从网上获取成功后的image
//从缓存中读取。
resultImage = [UIImage imageWithContentsOfFile:[self absolutePath:relativePath urlString:urlString systemPath:nil]];
if (resultImage) {
dispatch_async(dispatch_get_main_queue(), ^{
self.image = resultImage;
});
return;
}
///没有缓存的情况下。
NSURL *url = [NSURL URLWithString:urlString];
NSData *resultData = [NSData dataWithContentsOfURL:url];
resultImage = [UIImage imageWithData:resultData];
if (resultImage) {
///缓存data数据。
NSString *aFileName = [self absolutePath:relativePath urlString:nil systemPath:nil];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:aFileName]) {
////withIntermediateDirectories YES 表示可以创建多级目录。
if (![fileManager createDirectoryAtPath:aFileName withIntermediateDirectories:YESattributes:nilerror:nil]) {
NSLog(@"createFile error occurred");
}
}
NSString *resultFileString = [self absolutePath:relativePath urlString:urlString systemPath:nil];
if ([resultData writeToFile:resultFileString atomically:YES]) {
NSLog(@"保存成功");
}else{
NSLog(@"保存失败");
}
dispatch_async(dispatch_get_main_queue(), ^{
self.image = resultImage;
});
}
});
}
#pragma mark - 判断是否是空字符串
- (BOOL)isEmptyString:(NSString *)string{
if(string == nil){
return YES;
}
if([string isKindOfClass:[[NSNull null] class]]){
return YES;
}
if([string isEqualToString:@""]){
return YES;
}
if([string isEqualToString:@"<null>"])
return YES;
if([string isEqualToString:@"(null)"])
return YES;
returnNO;
}
#pragma mark - 从本地文件读取数据。
-(NSString *)absolutePath:(NSString*)relativePath urlString:(NSString *)urlString systemPath:(NSString *)systemPath{
if (relativePath == nil || [relativePath isEqualToString:@""]) {
relativePath = @"tempCache";
}
NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path1 = [path0 stringByAppendingPathComponent:relativePath];
if(urlString && ![urlString isEqualToString:@""]){///创建路径的时候不需要url,读,取的时候,需要url。
NSString *path2 = [path1 stringByAppendingPathComponent:[urlString stringByReplacingOccurrencesOfString:@"/"withString:@"_"]];
return path2;
}
return path1;
}
#pragma mark - 清除本地缓存
-(void)cleanDisk{
NSFileManager *fileManager = [NSFileManagerdefaultManager];
NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *defaultPath = [NSString stringWithFormat:@"%@/tempCache",path0];
NSLog(@"defaultPaht ==== %@",defaultPath);
[self folderSizeAtPath:defaultPath];
if ([fileManager removeItemAtPath:defaultPath error:nil]) {
NSLog(@"删除成功");
}else{
NSLog(@"删除失败");
}
[self folderSizeAtPath:defaultPath];
}
#pragma mark - 通常用于删除缓存的时,计算缓存大小
//单个文件的大小
- (long long) fileSizeAtPath:(NSString*) filePath{
NSFileManager* manager = [NSFileManagerdefaultManager];
if ([manager fileExistsAtPath:filePath]){
return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];
}
return 0;
}
#pragma mark - 遍历文件夹获得文件夹大小,返回多少M
- (float ) folderSizeAtPath:(NSString*) folderPath{
if (!folderPath || [folderPath isEqualToString:@""]) {
NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
folderPath = [NSString stringWithFormat:@"%@/tempCache",path0];
}
NSFileManager* manager = [NSFileManagerdefaultManager];
if (![manager fileExistsAtPath:folderPath])
{
NSLog(@"大小为0");
return 0;
}
NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];
NSString* fileName;
long long folderSize = 0;
while ((fileName = [childFilesEnumerator nextObject]) != nil){
NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];
folderSize += [self fileSizeAtPath:fileAbsolutePath];
}
NSLog(@"文件大小====%f M ",folderSize/(1024.0*1024.0));
return folderSize/(1024.0*1024.0);
}
@end
相关推荐
WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 ...
没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache实现)默认使用SD卡缓存getCacheDir()获取的缓存文件较容易被删除大于1M的...
还可以删除所需的任何标签(例如,常见,不常见,嵌入的图片)并创建包含或排除列表,从文件名称或路径中获取标签,以及根据文件的标签对文件进行重命名和排序等。 。 MetatOGGer 提供多语言支持,可让您自定义快速...
1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 9 0010 将组件置前/置后 9 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上的网格大小 10 0013 组件的选取 10 ...
1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 9 0010 将组件置前/置后 9 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上的网格大小 10 0013 组件的选取 10 ...
主要放图片和声音文件 6.文件 分钟.log 记录开机时间(这是程序的最初功能)。 功能总览: 前端显示 托盘图标 右键菜单 方便的添加文件 查看文件 删除文件 “自动释放内存” 记忆界面功能 关机自动记录运行...
本资源由大量的实用批处理文件组成,删除.txt尾缀名双击即可直接使用,既是学习的模板也可以作为实用程序,如下为文件组成,涉及文件管理,系统,网络,小工具等等: 0-reaname 2000XP停止打印.bat BAT珍藏 dir.bat...
233 如何获取文件创建时间? 234 如何获取文件修改时间? 235 如何获取文件访问时间? 236 如何设置文件创建时间? 237 如何设置文件修改时间? 238 如何设置文件访问时间? 239 如何获取文件夹创建时间? 240 如何获取...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
实例223——创建文本文件并进行读写数据操作 实例224——在文件的指定位置存放和读取数据 实例225——复制、删除、移动文件 实例226——实现遍历目录下的每个文件 实例227——获取文件的属性 实例228——获取...
createFileByDeleteOldFile : 判断文件是否存在,存在则在创建之前删除 copyDir : 复制目录 copyFile : 复制文件 moveDir : 移动目录 moveFile : 移动文件 deleteDir : 删除目录 deleteFile : 删除文件 ...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
0655 获取文件创建的日期和时间 406 0656 如何检索路径中的文件名和扩展名 406 0657 如何获得文件的大小 407 0658 如何修改文件属性 407 0659 如何监视文件系统变化情况 408 0660 如何获取文件的系统启动...
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...