封装 ASIHTTPRequest 多请求管理类
来源:互联网 发布:python 自定义迭代器 编辑:程序博客网 时间:2024/06/06 07:49
使用方法如上图.
下面直接发代码:
头文件
//// CWLWConnectManager.h// LechaoDrawGuess//// Created by luoge on 12-11-19.// Copyright (c) 2012年 watsy. All rights reserved.//#import <Foundation/Foundation.h>#import "ASIHTTPRequest.h"#import "ASIFormDataRequest.h"typedef enum { connectType_GET = 0, connectType_POST} connectType;@interface CWLWConnectManager : NSObject+ (CWLWConnectManager *) sharedInstance;+ (void) releaseInstance;//投递方法- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del;- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag;- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag key:(NSString *) sKey;#if NS_BLOCKS_AVAILABLE- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params result:(void(^)(BOOL bSuccess,id returnData,NSError *error)) block;- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params tag:(NSInteger) nTag result:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag)) block;- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params tag:(NSInteger) nTag key:(NSString *) sKey result:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag, NSString *skey)) block;#endif//取消网络连接- (BOOL) cancelWithHashValue:(NSUInteger) nItemHashValue;- (BOOL) cancelURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag key:(NSString *) sKey;@end@interface NSObject(CWLCConnection)- (void) didCWFinishSuccessedWithData:(id) data tag:(NSInteger) nTag key:(NSString *) sKey;- (void) didCWFinishFailedWithError:(NSError *) error tag:(NSInteger) nTag key:(NSString *) sKey;@end
实现文件:
//// CWLWConnectManager.m// LechaoDrawGuess//// Created by luoge on 12-11-19.// Copyright (c) 2012年 watsy. All rights reserved.//#import "CWLWConnectManager.h"static CWLWConnectManager *_pConnectionMgr_ = nil;@interface CWConnItem : NSObject <ASIHTTPRequestDelegate>@property (nonatomic, assign) connectType cType;@property (nonatomic, assign) NSInteger nTag;@property (nonatomic, strong) NSString *sKey;@property (nonatomic, assign) id delegate;@property (nonatomic, strong) NSString *sURL;@property (nonatomic, strong) NSDictionary *params;@property (nonatomic, strong) ASIHTTPRequest *httpReq;+ (CWConnItem *) connWithtype:(connectType) ct url:(NSString *) sl params:(NSDictionary *) pd Tag:(NSInteger) nt key:(NSString *) sk delegate:(id) del;- (CWConnItem *) initWithtype:(connectType) ct url:(NSString *) sl params:(NSDictionary *) pd Tag:(NSInteger) nt key:(NSString *) sk blockWithOutTagAndKey:(void(^)(BOOL bSuccess,id returnData,NSError *error)) blockWithOutTagAndKey blockWithOutKey:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag)) blockWithOutKey block:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag, NSString *skey)) block;- (void) start;@end@implementation CWConnItem@synthesize nTag,sKey,delegate,sURL,cType,params;@synthesize httpReq;- (void) dealloc { [httpReq clearDelegatesAndCancel]; [httpReq release]; [params release]; [sURL release]; [sKey release]; [super dealloc];}+ (CWConnItem *) connWithtype:(connectType) ct url:(NSString *) sl params:(NSDictionary *) pd Tag:(NSInteger) nt key:(NSString *) sk delegate:(id) del { CWConnItem *item = [[CWConnItem alloc] init]; item.nTag = nt; item.sKey = sk; item.sURL = sl; item.delegate = del; item.cType = ct; item.params = pd; return [item autorelease];}- (CWConnItem *) initWithtype:(connectType) ct url:(NSString *) sl params:(NSDictionary *) pd Tag:(NSInteger) nt key:(NSString *) sk blockWithOutTagAndKey:(void(^)(BOOL bSuccess,id returnData,NSError *error)) blockWithOutTagAndKey blockWithOutKey:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag)) blockWithOutKey block:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag, NSString *skey)) block { if (self = [super init]) { self.nTag = nt; self.sKey = sk; self.sURL = sl; self.cType = ct; self.params = pd; if (cType == connectType_GET) { self.httpReq = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:sURL]]; [httpReq setRequestMethod:@"GET"]; } else if (cType == connectType_POST) { self.httpReq = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:sURL]]; [httpReq setRequestMethod:@"POST"]; ASIFormDataRequest *form = (ASIFormDataRequest *) httpReq; for (NSString *paramKey in [params allKeys]) { [form addPostValue:[params objectForKey:paramKey] forKey:paramKey]; } } [httpReq setCompletionBlock:^(void){ //如果没有tag和key if (blockWithOutTagAndKey) { blockWithOutTagAndKey(YES, httpReq.responseString, nil); } //如果没有key if (blockWithOutKey) { blockWithOutKey(YES, httpReq.responseString, nil, nTag); } if (block) { block(YES, httpReq.responseString, nil, self.nTag, self.sKey); } if([[CWLWConnectManager sharedInstance] respondsToSelector:@selector(didFinishedWithItems:error:)]) { [[CWLWConnectManager sharedInstance] performSelector:@selector(didFinishedWithItems:error:) withObject:self withObject:nil]; } }]; [httpReq setFailedBlock:^(void) { if (blockWithOutTagAndKey) { blockWithOutTagAndKey(NO, httpReq.responseString, httpReq.error); } if (blockWithOutKey) { blockWithOutKey(NO, httpReq.responseString, httpReq.error, nTag); } if (block) { block(NO, httpReq.responseString, httpReq.error, self.nTag, self.sKey); } if([[CWLWConnectManager sharedInstance] respondsToSelector:@selector(didFinishedWithItems:error:)]) { [[CWLWConnectManager sharedInstance] performSelector:@selector(didFinishedWithItems:error:) withObject:self withObject:httpReq.error]; } }]; [httpReq start]; } return self;}- (void) start { NSAssert((sURL != nil), @"url can't be nil"); sURL = [sURL stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if (cType == connectType_GET) { httpReq = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:sURL]]; [httpReq setRequestMethod:@"GET"]; } else if (cType == connectType_POST) { httpReq = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:sURL]]; [httpReq setRequestMethod:@"POST"]; ASIFormDataRequest *form = (ASIFormDataRequest *) httpReq; for (NSString *paramKey in [params allKeys]) { [form addPostValue:[params objectForKey:paramKey] forKey:paramKey]; } } httpReq.delegate = self; [httpReq startAsynchronous];}- (BOOL) isEqual:(id)object { CWConnItem *item = (CWConnItem *)object; if (![self.sURL isEqualToString:item.sURL]) { return NO; } if (self.cType != item.cType) { return NO; } if (self.delegate != item.delegate) { return NO; } if (self.nTag != item.nTag) { return NO; } if (self.sKey != nil && item.sKey != nil && ![self.sKey isEqualToString:item.sKey]) { return NO; } for (NSString *paramKey in self.params) { id sp1 = [self.params objectForKey:paramKey]; id sp2 = [self.params objectForKey:paramKey]; if (sp2 == nil) { return NO; } if (![sp1 isEqual:sp2]) { return NO; } } return YES;}- (void)requestFinished:(ASIHTTPRequest *)request { if([[CWLWConnectManager sharedInstance] respondsToSelector:@selector(didFinishedWithItems:error:)]) { [[CWLWConnectManager sharedInstance] performSelector:@selector(didFinishedWithItems:error:) withObject:self withObject:nil]; }}- (void)requestFailed:(ASIHTTPRequest *)request { if([[CWLWConnectManager sharedInstance] respondsToSelector:@selector(didFinishedWithItems:error:)]) { [[CWLWConnectManager sharedInstance] performSelector:@selector(didFinishedWithItems:error:) withObject:self withObject:request.error]; }}@end#pragma mark - CWLWConnectManager@interface CWLWConnectManager()@property (nonatomic, strong) NSMutableDictionary *connItems;//移除元素- (id) hasItem:(CWConnItem *) item;- (void) removeItems:(CWConnItem *) conn;- (void) didFinishedWithItems:(CWConnItem *) conn error:(NSError *) error;@end@implementation CWLWConnectManager@synthesize connItems;- (id) init { if (_pConnectionMgr_) { return _pConnectionMgr_; } if (self = [super init]) { self.connItems = [NSMutableDictionary dictionary]; } return self;}- (void) dealloc { [connItems release]; [super dealloc];}+ (CWLWConnectManager *) sharedInstance { if (_pConnectionMgr_ == nil) { _pConnectionMgr_ = [[CWLWConnectManager alloc] init]; } return _pConnectionMgr_;}+ (void) releaseInstance { if (_pConnectionMgr_ != nil) { [_pConnectionMgr_ release]; _pConnectionMgr_ = nil; }}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del { return [self conURL:sURL connectType:cType params:params delegate:del tag:0];}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag { return [self conURL:sURL connectType:cType params:params delegate:del tag:nTag key:nil];}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag key:(NSString *) sKey { CWConnItem *item = [CWConnItem connWithtype:cType url:sURL params:params Tag:nTag key:sKey delegate:del]; if ([self hasItem:item]) { //重复调用方法 } NSUInteger hashValue = [item hash]; [self.connItems setObject:item forKey:[NSNumber numberWithUnsignedInteger:hashValue]]; [item start]; return hashValue;}//取消网络连接- (BOOL) cancelWithHashValue:(NSUInteger) nItemHashValue { CWConnItem *conn = [self.connItems objectForKey:[NSNumber numberWithUnsignedInteger:nItemHashValue]]; if (conn) { [conn.httpReq clearDelegatesAndCancel]; [self.connItems removeObjectForKey:[NSNumber numberWithUnsignedInteger:nItemHashValue]]; } return YES;}- (BOOL) cancelURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params delegate:(id) del tag:(NSInteger) nTag key:(NSString *) sKey { CWConnItem *item = [CWConnItem connWithtype:cType url:sURL params:params Tag:nTag key:sKey delegate:del]; CWConnItem *existItem = [self hasItem:item]; if (existItem != nil) { if (existItem.httpReq != nil) { [existItem.httpReq clearDelegatesAndCancel]; } [self.connItems removeObjectForKey:[NSNumber numberWithUnsignedInteger:[existItem hash]]]; return NO; } return YES;}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params result:(void(^)(BOOL bSuccess,id returnData,NSError *error)) block { CWConnItem *item = [[CWConnItem alloc] initWithtype:cType url:sURL params:params Tag:0 key:nil blockWithOutTagAndKey:block blockWithOutKey:nil block:nil]; NSUInteger hashValue = [item hash]; [self.connItems setObject:item forKey:[NSNumber numberWithUnsignedInteger:hashValue]]; [item release]; return hashValue;}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params tag:(NSInteger) nTag result:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag)) block { CWConnItem *item = [[CWConnItem alloc] initWithtype:cType url:sURL params:params Tag:nTag key:nil blockWithOutTagAndKey:nil blockWithOutKey:block block:nil]; NSUInteger hashValue = [item hash]; [self.connItems setObject:item forKey:[NSNumber numberWithUnsignedInteger:hashValue]]; [item release]; return hashValue;}- (NSUInteger) conURL:(NSString *) sURL connectType:(connectType) cType params:(NSDictionary *) params tag:(NSInteger) nTag key:(NSString *) sKey result:(void(^)(BOOL bSuccess,id returnData,NSError *error,NSInteger nTag, NSString *skey)) block { CWConnItem *item = [[CWConnItem alloc] initWithtype:cType url:sURL params:params Tag:nTag key:sKey blockWithOutTagAndKey:nil blockWithOutKey:nil block:block]; NSUInteger hashValue = [item hash]; [self.connItems setObject:item forKey:[NSNumber numberWithUnsignedInteger:hashValue]]; [item release]; return hashValue;}#pragma mark - private action- (id) hasItem:(CWConnItem *) conn { NSUInteger hashValue = [conn hash]; id object = [self.connItems objectForKey:[NSNumber numberWithUnsignedInteger:hashValue]]; if (object == nil) { for(id item in [self.connItems allValues]) { if ([conn isEqual:item]) { return item; } } } else { return conn; } return nil;}- (void) removeItems:(CWConnItem *) conn { NSUInteger hashValue = [conn hash]; id object = [self.connItems objectForKey:[NSNumber numberWithUnsignedInteger:hashValue]]; if (object != nil) { [[(CWConnItem *)object httpReq] clearDelegatesAndCancel]; [self.connItems removeObjectForKey:[NSNumber numberWithUnsignedInteger:hashValue]]; }}- (void) didFinishedWithItems:(CWConnItem *) conn error:(NSError *) error { if (error == nil) { if (conn.delegate && [conn.delegate respondsToSelector:@selector(didCWFinishSuccessedWithData:tag:key:)]) { [conn.delegate didCWFinishSuccessedWithData:conn.httpReq.responseString tag:conn.nTag key:conn.sKey]; } } else { if (conn.delegate && [conn.delegate respondsToSelector:@selector(didCWFinishFailedWithError:tag:key:)]) { [conn.delegate didCWFinishFailedWithError:error tag:conn.nTag key:conn.sKey]; } } [self removeItems:conn];}@end
- 封装 ASIHTTPRequest 多请求管理类
- 封装 ASIHTTPRequest 多请求管理类
- asihttprequest 网络请求类封装
- ASIHTTPRequest 对GET POST 请求简单封装
- ASIHTTPRequest 封装
- ASIHttpRequest封装
- ASIHTTPRequest 对GET和POST请求简单封装
- 对于ASIHTTPRequest的封装
- 对ASIHTTPRequest的封装
- 对ASIHTTPRequest的封装
- ASIHTTPRequest的封装
- iOS ASIHttpRequest 封装
- Okhttp请求封装类
- ASIHTTPRequest 网络请求 iphone
- ASIHTTPRequest 网络请求 iphone
- ASIHTTPRequest框架同步请求
- ASIHTTPRequest异步请求数据
- ASIHTTPRequest 保存请求数据
- 存储过程及流程控制
- DOS/Windows和Linux/Unix间文件格式和字符集转换
- 博客的开端,希望是个好的开始
- VC++2012编程演练数据结构《12》二叉排序树
- 《Android应用性能优化》试读:第一章:Java代码优化
- 封装 ASIHTTPRequest 多请求管理类
- android游戏开发自学笔记3-3
- SimpleTagSupport类的生命周期及用BodyTagSupport类开发自定义标签
- omnetpp debug功能
- 缓存实例
- UILabel的text顶部或底部显示
- 算法导论——合并排序
- openCV实现卡通画的效果
- 软件应用无所不在 正吞噬整个世界