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

转载 2015年11月18日 11:19:38




    博客分类:

//

//  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_DEFAULT0), ^{

        UIImage *resultImage = nil;///从网上获取成功后的image

        //从缓存中读取。

        resultImage = [UIImage imageWithContentsOfFile:[self absolutePath:relativePath urlString:urlStringsystemPath: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:aFileNamewithIntermediateDirectories: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;

            });

        }

    });

伦理片 http://www.dotdy.com/

 

#pragma mark - 判断是否是空字符串

- (BOOL)isEmptyString:(NSString *)string{

    if(string == nil){

        return YES;

    }

    if([string isKindOfClass:[[NSNull nullclass]]){

        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(NSCachesDirectoryNSUserDomainMaskYES)objectAtIndex:0];

    NSString *path1 = [path0 stringByAppendingPathComponent:relativePath];

    if(urlString && ![urlString isEqualToString:@""]){///创建路径的时候不需要url,读,取的时候,需要url

        NSString *path2 = [path1 stringByAppendingPathComponent:[urlStringstringByReplacingOccurrencesOfString:@"/"withString:@"_"]];

        return path2;

    }

    return path1;

}

 

#pragma mark - 清除本地缓存

-(void)cleanDisk{

    NSFileManager *fileManager = [NSFileManagerdefaultManager];

    NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectoryNSUserDomainMaskYES)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:nilfileSize];

    }

    return 0;

}

#pragma mark - 遍历文件夹获得文件夹大小,返回多少M

- (float ) folderSizeAtPath:(NSString*) folderPath{

    if (!folderPath || [folderPath isEqualToString:@""]) {

        NSString *path0 = [NSSearchPathForDirectoriesInDomains(NSCachesDirectoryNSUserDomainMaskYES)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

影音先锋电影 http://www.iskdy.com/

 





相关文章推荐

【菜鸟学安卓】- 获取网络图片一 BitmapFactory options OutOfMemery问题内存溢出

问题是这么来的,博主想获取一组图片,就开始学习网络图片的获取。 先贴上一段代码,博主就是用这段代码来世获取图片的: //获取图片资源 public static Bitmap ...
  • wduj123
  • wduj123
  • 2016年04月24日 14:53
  • 466

ListView如何加载网络图片,防止内存溢出

首先是源代码的下载地址:已经上传,暂未显示,稍后奉上。   打开源码,可以看到:        然后来看源代码的目录,再介绍ListView之前,先说一些准备工作。   Cache类是为图片缓存准备...

读取网络图片和本地sd卡图片文件 解析为空 SkImageDecoder::Factory returned null

读取网络图片和本地sd卡图片文件 解析为空Factory returned null

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];             //请求网络地址数据的同步方...

ViewPager实现加载网络图片,动态添加删除效果

本例实现从网络加载图片,动态添加删除ViewPager中页面,图片缓存功能。 直接上代码,重点都写注释里了。 记得权限加网络连接。 懒得上图。 import android.app.Activ...

iOS 异步加载网络图片,获取图片真实尺寸

项目需求: 在网络上加载一组图片的数据,并且这组图片要按照比例展示出来做法分析:(1)首页界面上要是使用的图片控件的创建,这里的高度是用设定的高度,这部分需要在主线程完成; (2)第二部部分是获取...

(POJ1321) 棋盘问题 <DFS ,八皇后问题的变形,皇后数目小于等于行数即有些行可以不放>

[TOC] 棋盘问题 Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和...

【Android网络编程】获取网络图片,具有缓存功能

【Android网络编程】获取网络图片,具有缓存功能
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己写的获取网络图片,不放内存里,包括文件的删除,创建
举报原因:
原因补充:

(最多只允许输入30个字)