Block学习一:基本用法,用block封装NSURLRequest异步请求

来源:互联网 发布:php文章评论代码 编辑:程序博客网 时间:2024/06/07 11:08

首先看下面这段代码:

void (^myFirstBlock)(int theOne,int theTwo) = ^(int theOne,int theTwo){        NSLog(@"====%d",theOne+theTwo);    };    myFirstBlock(100,300);

void:指的时返回数据类型,myFirstBlock:指的是block的名称,后面两个是参数。等号右边的block的实现。

个人理解:block本身就是一个类,他的实例化就是一个对象,下面看看这个数据请求的封装,来好好理解这句话。

我把数据请求这一款,封装在了:WebService这个类中,先看h文件:

<span style="font-size:14px;">////  WebService.h//  BlockDemo////  Created by junyuan ji on 14-6-3.//  Copyright (c) 2014年 junyuan ji. All rights reserved.//#import <Foundation/Foundation.h>typedef void (^successBlock)(NSMutableURLRequest * request,NSMutableData * reciveData);typedef  void (^errorBlock)(NSMutableURLRequest * request);typedef void (^startBlock)(NSMutableURLRequest * request);typedef void (^complectionBlock)(NSMutableURLRequest * request,NSMutableData * reciveData);@interface WebService : NSObject<NSURLConnectionDataDelegate,NSURLConnectionDelegate>{   __block NSHTTPURLResponse * httpResponse;}@property (nonatomic,copy) successBlock successblock;@property (nonatomic,copy) errorBlock errorblock;@property (nonatomic,copy) startBlock startblock;@property (nonatomic,copy) complectionBlock complectionblock;@property (nonatomic,retain) __block NSMutableData * reciveMutableData;-(void)StartUrl:(NSString *)path;-(void)Url:(NSString *)path onSuccess:(successBlock)successBlock onError:(errorBlock)errorBlock onStart:(startBlock)startBlock onCompletion:(complectionBlock)complectionBlock;@end</span><span style="font-size:18px;"></span>

上面typedef是声明block,下面把block声明称属性,比如successblock是一个对象,自然可以把它声明成属性。

下面看看m文件的代码:

////  WebService.m//  BlockDemo////  Created by junyuan ji on 14-6-3.//  Copyright (c) 2014年 junyuan ji. All rights reserved.//#import "WebService.h"@implementation WebService-(void)Url:(NSString *)path onSuccess:(successBlock)successBlock onError:(errorBlock)errorBlock onStart:(startBlock)startBlock onCompletion:(complectionBlock)complectionBlock{    [self StartUrl:path];    self.successblock = ^(NSMutableURLRequest * request,NSMutableData * reciveData){        if (httpResponse.statusCode == 200)        {           successBlock(request,reciveData);        }    };    self.startblock = ^(NSMutableURLRequest *request){        startBlock(request);    };    self.errorblock = ^(NSMutableURLRequest * request){        errorBlock(request);    };    self.complectionblock = ^(NSMutableURLRequest * request,NSMutableData * reciveData){        complectionBlock(request,reciveData);    };}-(void)StartUrl:(NSString *)path{    NSURL * url = [NSURL URLWithString:path];    NSMutableURLRequest * request1 = [NSMutableURLRequest requestWithURL:url];    [NSURLConnection connectionWithRequest:request1 delegate:self];}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{     NSLog(@"%s",__FUNCTION__);    self.errorblock((NSMutableURLRequest *)connection.currentRequest);}- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"%s",__FUNCTION__);    httpResponse = (NSHTTPURLResponse *)response;    self.reciveMutableData = [NSMutableData dataWithCapacity:0];    self.startblock((NSMutableURLRequest *)connection.currentRequest);}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{     NSLog(@"%s",__FUNCTION__);    [self.reciveMutableData appendData:data];}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{     NSLog(@"%s",__FUNCTION__);    self.complectionblock((NSMutableURLRequest *)connection.currentRequest,self.reciveMutableData);}@end

上面这几段代码,应该好好去理解,如果上面这段代码看懂了,block基本上也就掌握了。

下面看看如何使用封装的这个类:


#import "AppDelegate.h"#import "WebService.h"@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    // Override point for customization after application launch.    self.window.backgroundColor = [UIColor whiteColor];    [self.window makeKeyAndVisible];        void (^myFirstBlock)(int theOne,int theTwo) = ^(int theOne,int theTwo){        NSLog(@"====%d",theOne+theTwo);    };    myFirstBlock(100,300);            [[[WebService alloc] init] Url:@"http://zhangmenshiting.baidu.com/data2/music/65532488/1490719597200128.mp3?xcode=f1ea4f162f276d435fc963a294370657c9d1e761819ce1d5" onSuccess:^(NSMutableURLRequest *request, NSMutableData *reciveData) {        NSLog(@"reciveData = %@",reciveData);    } onError:^(NSMutableURLRequest *request) {        NSLog(@"error = ");    } onStart:^(NSMutableURLRequest *request) {        NSLog(@"start");    } onCompletion:^(NSMutableURLRequest *request, NSMutableData *reciveData) {        NSLog(@"completion");    }];        return YES;}





1 0
原创粉丝点击