`
zjjzmw1
  • 浏览: 1352622 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

自己写的获取网络图片,不放内存里,包括文件的删除,创建

    博客分类:
  • iOS
阅读更多

//

//  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

 

0
0
分享到:
评论

相关推荐

    API之网络函数---整理网络函数及功能

    WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 ...

    CacheManage::fire:android缓存管理器,分为内存缓存和文件缓存两种 先取内存数据,没有再从文件缓存中取

    没有再从文件缓存中获取特点封装,继承其所有功能二级缓存内存缓存(采用SoftReference和LruCache,防止内存溢出)文件缓存(由ASimpleCache实现)默认使用SD卡缓存getCacheDir()获取的缓存文件较容易被删除大于1M的...

    音频文件标签编辑器 Metatogger 7.0.2..zip

    还可以删除所需的任何标签(例如,常见,不常见,嵌入的图片)并创建包含或排除列表,从文件名称或路径中获取标签,以及根据文件的标签对文件进行重命名和排序等。 。 MetatOGGer 提供多语言支持,可让您自定义快速...

    delphi 开发经验技巧宝典源码

    1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 9 0010 将组件置前/置后 9 0011 如何锁定窗体中的组件 9 0012 如何改变窗体上的网格大小 10 0013 组件的选取 10 ...

    delphi 开发经验技巧宝典源码06

    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...

    Visual C++编程技巧精选500例.pdf

    233 如何获取文件创建时间? 234 如何获取文件修改时间? 235 如何获取文件访问时间? 236 如何设置文件创建时间? 237 如何设置文件修改时间? 238 如何设置文件访问时间? 239 如何获取文件夹创建时间? 240 如何获取...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    《Visual C++范例大全》随书光盘 第十章

    实例223——创建文本文件并进行读写数据操作 实例224——在文件的指定位置存放和读取数据 实例225——复制、删除、移动文件 实例226——实现遍历目录下的每个文件 实例227——获取文件的属性 实例228——获取...

    Android开发人员不得不收集的代码

    createFileByDeleteOldFile : 判断文件是否存在,存在则在创建之前删除 copyDir : 复制目录 copyFile : 复制文件 moveDir : 移动目录 moveFile : 移动文件 deleteDir : 删除目录 deleteFile : 删除文件 ...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例097 不改变长度删除数组中的元素 115 实例098 删除数组元素后改变其长度 116 4.2 常用数组排序算法 117 实例099 使用选择排序法对一维数组进行排序 117 实例100 使用冒泡排序法对一维数组进行排序 118 实例101 ...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    C#开发经验技巧宝典

    0655 获取文件创建的日期和时间 406 0656 如何检索路径中的文件名和扩展名 406 0657 如何获得文件的大小 407 0658 如何修改文件属性 407 0659 如何监视文件系统变化情况 408 0660 如何获取文件的系统启动...

Global site tag (gtag.js) - Google Analytics