您的位置:首页 > 理论基础 > 计算机网络

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

2015-11-18 11:19 218 查看



博客分类:

//

// 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: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 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:[urlStringstringByReplacingOccurrencesOfString:@"/"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

影音先锋电影 http://www.iskdy.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: