MRC下图片异步加载的小代码

1.给定一个imageView,显示图片

#import <UIKit/UIKit.h>
@interface AsynImageView : UIImageView
@property ( nonatomic , retain ) NSString *urlString;//网址
- (void)setUrlString:(NSString *)urlString placeholder:(UIImage *)aImage;
@end

#import "AsynImageView.h"

@implementation AsynImageView

- (
void )dealloc
{
   
self . urlString = nil ;
    [
super dealloc ];
}

- (
void )setUrlString:( NSString *)urlString
{
   
if ( _urlString != urlString) {
        [
_urlString release ];
       
_urlString = [urlString retain ];
    }
   
// 把图片中的 ":" 和"/"换成 "_", 作为图片的名字 , 保证图片名字不重复
   
NSString *imageName = [urlString stringByReplacingOccurrencesOfString : @":" withString : @"_" ];
    imageName = [imageName
stringByReplacingOccurrencesOfString : @"/" withString : @"_" ];
   
   
// 获取沙盒中缓存文件夹路径
   
NSString *cachesPath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) firstObject ];
   
// 图片路径
   
NSString *filePath = [cachesPath stringByAppendingPathComponent :imageName];
   
NSFileManager *fm = [ NSFileManager defaultManager ];
   
if ([fm fileExistsAtPath :filePath]) {
       
// 存在图片
       
UIImage *image = [ UIImage imageWithContentsOfFile :filePath];
       
// 显示图片
       
self . image = image;
    }
else {
        // 不存在
//block内部不能使用self,会造成循环套用
// mrc 下使用
//__block 类名 *(新名字) = self;
    // arc 下使用
 //   __weak  类名 *(新名字) = self;

        __block AsynImageView *blockSelf = self ;
//给定网址
        NSURL *url = [[ NSURL alloc ] initWithString :urlString];
//发出网络请求
        NSURLRequest *urlRequest = [[ NSURLRequest alloc ] initWithURL :url cachePolicy : NSURLRequestUseProtocolCachePolicy timeoutInterval : 30 ];
//网络加载
        [ NSURLConnection sendAsynchronousRequest :urlRequest queue :[ NSOperationQueue mainQueue ] completionHandler :^( NSURLResponse *response, NSData *data, NSError *error) {
           
if (error) {
               
NSLog ( @"%@" , error);
            }
else {
               
// 显示图片
               
UIImage *image = [ UIImage imageWithData :data];
                blockSelf.
image = image;
               
// 存储到沙盒中
                [data
writeToFile :filePath atomically : YES ];
               
NSLog ( @"%@" , filePath);
            }
        }];
        [urlRequest
release ];
    }
}

- (
void )setUrlString:( NSString *)urlString placeholder:( UIImage *)aImage
{
   
// 显示占位
   
self . image = aImage;
   
// 设置要显示的图片的 url
   
self . urlString = urlString;
}
2.根视图显示内容

#import "RootViewController.h"

#import "AsynImageView.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (
void )viewDidLoad {
    [
super viewDidLoad ];
    // Do any additional setup after loading the view.
    AsynImageView *asynIV = [[ AsynImageView alloc ] initWithFrame : CGRectMake ( 0 , 0 , 375 , 667 )];
//    asynIV.urlString = @"http://img.funshion.com/attachment/upload/images/2009/11-05/11910545_1257387524_357.jpg";
    [asynIV
setUrlString : @"http://ww1.sinaimg.cn/mw600/533cb486jw1diewjr9eq6j.jpg" placeholder :[ UIImage imageNamed : @"1" ]];
    [
self . view addSubview :asynIV];
    [asynIV
release ];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值