#import <UIKit/UIKit.h>
#import "ASIHTTPRequest.h"
@interface WebImageView : UIImageView <ASIHTTPRequestDelegate>
- (void)setImageURL:(NSURL *)url;
@end
#import "WebImageView.h"
#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
@implementation WebImageView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)setImageURL:(NSURL *)url
{
//同步請求
//[self synchronous:url];
//異步
// [self aSynchronous:url];
[self aSynchronousBlock:url];
}
//同步請求
- (void)synchronous:(NSURL *)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request setTimeOutSeconds:60];
//設置請求頭
//request setRequestHeaders:(NSMutableDictionary *)
//發送同步請求
[request startSynchronous];
NSError *error = request.error;
if (error != nil){
NSLog(@"error :%@", error);
}else{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
}
}
//異步
- (void)aSynchronous:(NSURL *)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request setTimeOutSeconds:60];
//發送同步請求
request.delegate = self;
[request startAsynchronous];
}
//使用block, 不用設置代理
- (void)aSynchronousBlock:(NSURL *)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request setTimeOutSeconds:60];
//網絡請求結束調用
[request setCompletionBlock:^{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
}];
[request setFailedBlock:^{
NSLog(@"error: %@", request.error);
}];
//發送異步請求
[request startAsynchronous];
}
//post 請求參數 網絡請求 ASIFormDataRequest
- (void)aSynchronousPost:(NSURL *)url
{
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setRequestMethod:@"POST"];
[request setTimeOutSeconds:60];
//設置請求參數
//username=gkgk&pwd=3333
//[request addPostValue:@"" forKey:@""]//比如用戶名和密碼等。
//網絡請求結束調用
[request setCompletionBlock:^{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
}];
[request setFailedBlock:^{
NSLog(@"error: %@", request.error);
}];
//發送異步請求
[request startAsynchronous];
}
#pragma mark ASIHttpRequest delegate
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSLog(@"error :%@", request.error);
}
@end
緩存
//使用block, 不用設置代理
- (void)aSynchronousBlock:(NSURL *)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request setTimeOutSeconds:60];
//網絡請求結束調用
[request setCompletionBlock:^{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
}];
// 使用緩存策略
//緩存位置
NSString *cachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
ASIDownloadCache *cache = [[ASIDownloadCache alloc]init];
[cache setStoragePath:cachePath];
//緩存策略
cache.defaultCachePolicy = ASIOnlyLoadIfNotCachedCachePolicy;
//每次啓動,清除上次緩存文件
request.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;
//緩存對象
request.downloadCache = cache;
[request setFailedBlock:^{
NSLog(@"error: %@", request.error);
}];
//發送異步請求
[request startAsynchronous];
}
判斷數據來自緩存,還是網絡
//使用block, 不用設置代理
- (void)aSynchronousBlock:(NSURL *)url
{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setRequestMethod:@"GET"];
[request setTimeOutSeconds:60];
//網絡請求結束調用
[request setCompletionBlock:^{
NSData *data = [request responseData];
self.image = [UIImage imageWithData:data];
//判斷數據來自網路,還是緩存
if (request.didUseCachedResponse){
NSLog(@"數據來自緩存");
}else{
NSLog(@"數據來自網絡");
}
}];
// 使用緩存策略
//緩存位置
NSString *cachePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
ASIDownloadCache *cache = [[ASIDownloadCache alloc]init];
[cache setStoragePath:cachePath];
//緩存策略
cache.defaultCachePolicy = ASIOnlyLoadIfNotCachedCachePolicy;
//每次啓動,清除上次緩存文件
request.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;
//緩存對象
request.downloadCache = cache;
[request setFailedBlock:^{
NSLog(@"error: %@", request.error);
}];
//發送異步請求
[request startAsynchronous];
}
需要添加ASIHTtpRequestSample開源文件以及
libz.dylib
libxml2.dylib
moblieCoreServices.framework
systemConfigration.framework
CFNetwork.framework