Block学习一:基本用法,用block封装NSURLRequest异步请求
来源:互联网 发布:php文章评论代码 编辑:程序博客网 时间:2024/06/08 14:19
首先看下面这段代码:
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
- Block学习一:基本用法,用block封装NSURLRequest异步请求
- 异步block网络请求
- Block封装http请求
- block的基本用法
- Block的基本用法
- block的基本用法
- Block的基本用法
- Block基本用法
- block 基本用法
- 6.23 Block封装post异步网路请求& AFNetworking第三方封装
- 43.用Block和协议对网络请求简单封装
- 图片封装下载----异步block传值
- Objective-C Block基本用法
- iOS block 基本用法总结
- 网络异步Get请求之block方法
- 数据下载-block 形式的异步请求
- 利用block封装网络请求类
- Block (一) block Demo
- Python中线程池的实现
- Hash碰撞导致的denial of service
- OPPO find5(X909)Omni刷机包 原生安卓4.4.2 超流畅省电
- java找到文件夹下所有的指定格式文件并输出到txt
- Linux用户组与文件权限
- Block学习一:基本用法,用block封装NSURLRequest异步请求
- 在前人代码的基础上写的JS函数
- 设备管理器里的6TO4 Adapter
- 工厂模式
- 论SEO
- insmod
- Reduce Gaming Latency (Lowering Ping) in Windows
- 关于OC 的Initialize
- Visual Studio 2010 + IE 9无法断点调试JavaScript的解决方法