iOS编程------UITableView中图片的异步下载 / KVO监测Model图片下载
来源:互联网 发布:linux 中文man手册 编辑:程序博客网 时间:2024/05/22 09:04
//// AppDelegate.h// UI17_imageDownLoader//// Created by l on 15/9/23.// Copyright (c) 2015年 . All rights reserved.//#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@end//// AppDelegate.m// UI17_imageDownLoader//// Created by l on 15/9/23.// Copyright (c) 2015年 . All rights reserved.//#import "AppDelegate.h"#import "ImageDownloader.h"@interface AppDelegate ()<ImageDownloaderDelegate>@property (nonatomic, retain) UIImageView *imageView;@end@implementation AppDelegate- (void)dealloc{ [_window release]; [_imageView release]; [super dealloc];}//实现自定义协议方法- (void)imageDownloader:(ImageDownloader *)downloader didFinishLoading:(UIImage *)image{ _imageView.image = image;}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; //一. 异步图片下载类 _imageView = [[UIImageView alloc] initWithFrame:(CGRectMake(80, 100, 250, 300))]; //图片同步下载: (同步网络请求,会卡线程)// _imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://picm.photophoto.cn/015/037/003/0370032259.jpg"]]]; //--------------// //代理方法: [ImageDownloader imageDownloaderWithURLString:@"http://d.hiphotos.baidu.com/image/pic/item/d0c8a786c9177f3ec4c5de0c72cf3bc79f3d5639.jpg" delegate:self]; //-------------// //block:// NSString *url = @"http://img.sootuu.com/vector/2006-4/200642011196982.jpg";////// [ImageDownloader sendAsynchonousURLString:url completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {// // //获取到回调的data数据,赋值给imageView.image// _imageView.image = [UIImage imageWithData:data];// }];//// //加载_imageView [self.window addSubview:_imageView]; return YES;}@end//////////////////////////////////////////////////////////////////////// ImageDownloader.h// UI17_imageDownLoader//// Created by l on 15/9/23.// Copyright (c) 2015年 . All rights reserved.//此为异步图片下载类,封装了系统的connection , 异步网络请求.//采用delegate 和 block 两种方式.#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>//定义block类型typedef void (^CompletionHandler)(NSURLResponse *response, NSData *data, NSError *error);@class ImageDownloader;//定义协议@protocol ImageDownloaderDelegate <NSObject, NSURLConnectionDelegate, NSURLConnectionDataDelegate>@optional//图片下载完成之后触发- (void)imageDownloader:(ImageDownloader *)downloader didFinishLoading:(UIImage *)image;//图片下载失败的时候触发- (void)imageDownloader:(ImageDownloader *)downloader didFailWithError:(NSError *)error;@end@interface ImageDownloader : NSObject@property (nonatomic, copy) NSString *urlString;//图片网络地址//1.delegate@property (nonatomic, assign) id<ImageDownloaderDelegate> delegate;//自定义初始化方法- (instancetype)initWithURLString:(NSString *)urlString delegate:(id<ImageDownloaderDelegate>) delegate;//便利构造器+ (ImageDownloader *)imageDownloaderWithURLString:(NSString *)urlString delegate:(id<ImageDownloaderDelegate>) delegate;+ (void)sendAsynchonousURLString:(NSString *)urlString completionHandler:(CompletionHandler)handler;@end//// ImageDownloader.m// UI17_imageDownLoader//// Created by l on 15/9/23.// Copyright (c) 2015年 . All rights reserved.//#import "ImageDownloader.h"@interface ImageDownloader ()<NSURLConnectionDelegate, NSURLConnectionDataDelegate>@property (nonatomic, retain) NSMutableData *receiveData;@end@implementation ImageDownloader- (void)dealloc{ [_urlString release]; [_receiveData release]; [super dealloc];}//重写初始化方法(自定义初始化方法)- (instancetype)initWithURLString:(NSString *)urlString delegate:(id<ImageDownloaderDelegate>) delegate{ self = [super init]; if (self) { self.urlString = urlString; self.delegate = delegate; //进行网络请求 NSURL *url = [NSURL URLWithString:_urlString]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:0 timeoutInterval:10]; //异步网络请求方式,代理 [NSURLConnection connectionWithRequest:request delegate:self]; } return self;}//便利构造器+ (ImageDownloader *)imageDownloaderWithURLString:(NSString *)urlString delegate:(id<ImageDownloaderDelegate>) delegate{ return [[[ImageDownloader alloc] initWithURLString:urlString delegate:delegate] autorelease];}- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ self.receiveData = [NSMutableData data];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [self.receiveData appendData:data];}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ //数据接收完成后,把数据通过协议的方法,作为方法参数,传递给delegate UIImage *image = [UIImage imageWithData:self.receiveData]; if (_delegate != nil && [_delegate respondsToSelector:@selector(imageDownloader:didFinishLoading:)]) { [_delegate imageDownloader:self didFinishLoading:image]; }}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ if (_delegate != nil && [_delegate respondsToSelector:@selector(imageDownloader:didFailWithError:)]) { [_delegate imageDownloader:self didFailWithError:error]; }}//block+ (void)sendAsynchonousURLString:(NSString *)urlString completionHandler:(CompletionHandler)handler{ NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { //把参数通过block的参数传递出去 handler(response, data, connectionError); }];}@end
0 0
- iOS编程------UITableView中图片的异步下载 / KVO监测Model图片下载
- iOS ——KVO 监测Model 图片下载
- KVO 监测Model 图片下载
- 46.KVO监测Model图⽚下载
- [TwistedFate]KVO监测Model图片加载
- KVO和异步图片下载的结合使用
- IOS中UITableView异步加载图片的实现
- IOS中UITableView异步加载图片的实现
- iOS UITableView中异步加载图片
- UIday1603:图片异步下载、KVO
- IOS中如何异步加载图片(三)KVO观察者
- UI课程17 图片异步下载、KVO
- UI基础-图片异步下载、KVO
- iOS UITableView中异步加载图片 - 解决方案
- iOS UITableView中异步加载图片 - 解决方案
- 数据解析/网络编程/图片异步下载KVO/初级数据持久化
- iOS 异步下载图片
- iOS 异步下载图片
- 公钥,私钥 和数字证书
- 剑指offer—扑克牌顺子
- codeforces 571B B. Minimization(dp)
- 程序的机器级表示3.7
- iOS大典之表视图UITableView
- iOS编程------UITableView中图片的异步下载 / KVO监测Model图片下载
- 二指针相减是什么
- hdu 5490 Simple Matrix 递推公式+逆元+组合数
- 正则表达式(Regular Expression)教程
- 【Linux 移植 】——4、移植 u-boot-2012.04.01 之 支持NAND启动
- Linux内核的构建过程----Linux内核剖析(五)
- 前向定义导致 程序编译出现"field has incomplete type"问题的解决
- HDU 1078FatMouse and Cheese(记忆化搜索)
- IOS中定时器NSTimer的开启与关闭