iOS疯狂详解之ASIHttpRequest的简单封装

//  iOS疯狂详解之ASIHttpRequest的简单封装
//  WLHTTPClient.h
//  WLWLListen
//
//  Created by long on 14-12-15.
//  Copyright (c) 2014年 WLong. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"

@protocol WLHTTPClientDelegate<NSObject>
@optional
@end

@interface WLHTTPClient : NSObject

@property (nonatomic,assign) id<WLHTTPClientDelegate>delegate;

+ (WLHTTPClient *)sharedClient;


- (void)postInfoWithDelegate:(id<WLHTTPClientDelegate>)delegate
                  withMethod:(NSString *)method
                  withParams:(NSDictionary *)params
          withSuccuessMethod:(SEL )successMethod
            withFailedMethod:(SEL )failMethod;

@end


//
//  WLHTTPClient.m
//  WLVkoListen
//
//  Created by long on 14-12-15.
//  Copyright (c) 2014年 WLong. All rights reserved.
//

#import "WLHTTPClient.h"

#define SuppressPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)


@implementation WLHTTPClient

+ (WLHTTPClient *)sharedClient
{
    static WLHTTPClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[WLHTTPClient alloc]init];
        
    });
    
    return _sharedClient;
    
}

- (void)postInfoWithDelegate:(id<WLHTTPClientDelegate>)delegate
                  withMethod:(NSString *)method
                  withParams:(NSDictionary *)params
          withSuccuessMethod:(SEL )successMethod
            withFailedMethod:(SEL )failMethod
{
    
    NSString *urlStr = [NSString stringWithFormat:@"%@%@",baseHttpUrl,method];
    
    __weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]];
    
    [request setRequestMethod:@"POST"];
    
    for (int i = 0;  i < [params allKeys].count; i++) {
        [request addPostValue:params[[params allKeys][i]] forKey:[params allKeys][i]];
    }
    
    [request setCompletionBlock:^{
        
        NSData *jsonData = request.responseData;
        
        id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
        
        SuppressPerformSelectorLeakWarning(
                                           [delegate performSelector:successMethod withObject:result];
                                           );
        
    }];
    
    [request setFailedBlock:^{
        
        SuppressPerformSelectorLeakWarning(
                                           [delegate performSelector:failMethod withObject:@"网络连接失败,请检查您的网络连接或重试!"];
                                           );
    }];
    
    [request startAsynchronous];
    
    
}


@end


更多iOS疯狂详解:http://blog.csdn.net/wanglongblog

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。