Block学习一门:基本使用,使用block包NSURLRequest异步请求
2015-12-09 09:54
423 查看
首先,看一下下面的代码:
void:指的时返回数据类型,myFirstBlock:指的是block的名称,后面两个是參数。
等号右边的block的实现。
个人理解:block本身就是一个类。他的实例化就是一个对象。以下看看这个数据请求的封装,来好好理解这句话。
我把数据请求这一款,封装在了:WebService这个类中,先看h文件:
上面typedef是声明block,以下把block声明称属性。比方successblock是一个对象,自然能够把它声明成属性。
以下看看m文件的代码:
上面这几段代码,应该好好去理解,假设上面这段代码看懂了,block基本上也就掌握了。
以下看看怎样使用封装的这个类:
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;
}
相关文章推荐
- Errors running builder "Integrated External Tool Builder" on project
- easyui分页显示本地log4j文件+文件下载+打包下载
- 获取properties中的 value
- Java 中 StringBuilder 在高性能用法总结
- Arduino - 315/433MHz RF无线收发模块
- weblogic10异常:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.
- serialVersionUID的作用
- Java-构建器模式(Buider模式)
- 自动取款机 UI开发总结
- iOS应用开发中使用UIScrollView控件来实现图片缩放
- Android之使用Android-query框架进行开发(二)
- Android之使用Android-query框架进行开发(一)
- zzulioj1818: squee_spoon and his Cube VI
- 仿淘宝Demo UI分析
- 利用treegrid的loadFilter显示列的子属性
- 黑马程序员---易错、易望、基础、重要知识点 ——API常用类1——StringBuffer/StringBuilder
- 272. Closest Binary Search Tree Value II
- terminating the instance due to error 119
- Fail to build seafile-server libevhtp
- 贝塞尔曲线UIBezierPath