代码改变世界

人在千锋-网络学习第四天之网络请求

2015-04-07 20:01  牧贰  阅读(137)  评论(0编辑  收藏  举报

人在千锋-网络学习第四天之网络请求

一、Block的使用:

   

 1、什么是block

    UI开发和网络常见功能实现回调,按钮的事件处理方法是回调方法

    (1)按钮target-action

    (2)表格视图 传入一个指针self,回调视图控制器中的方法

    (3)block,语句块,解决回调,理解为匿名函数!!

 2、block的基本使用

    定义block变量  

    定义block语句块

    block传值

//Block的写法
-(void)blockBasicUse
{
    //1、不带参数
    void (^yourBlock)(void)=^void(){
        NSLog(@"不带参数的");
    };
    yourBlock();
    
    //2、带参数的block
    int (^myBlock)(int,int)=^int(int x,int y){
        return x+y;
    };
    int a=myBlock(5,3);
    NSLog(@"a=%d",a);
    
    //block捕获外部变量
    int num=10;
    __block int nubber=10;
    void(^ b1)()=^void()
    {
        //block能够使用和修改实例变量
        _page=1;
        
        //block中不能修改局部变量的值
        //num++;
        
        //block中只能修改i__block修饰的局部变量
        nubber++;
        
        //有可能有循环引用警告,那么就使用下面的方法
        __weak typeof(self) weakSelf=self;
        weakSelf.url=@"text";
        
    };
    b1();
    
}

//利用block排序

    Dog *ahua=[[Dog alloc]init];
    ahua.nickName=@"ahua";
    ahua.age=4;
    
    Dog *amiao=[[Dog alloc]init];
    amiao.nickName=@"amiao";
    amiao.age=3;
    
    Dog *dahuang=[[Dog alloc]init];
    dahuang.nickName=@"dahuang";
    dahuang.age=5;
    
    NSMutableArray *arr=[[NSMutableArray alloc]initWithArray:@[ahua,amiao,dahuang]];
    
   arr sortUsingComparator:^NSComparisonResult(id obj1, id obj2)   {
        Dog1 *adog=obj1;
        Dog2 *bdog=obj2;
        return adog.age-bdog.age;
    }];

2、IOS开发网络基础知识:

 1、一次http请求的完整过程

    浏览器或者应用发起http请求,请求包含http请求(GET,POST),地址(URL),协议(HTTP/1.1),请求头部,附加信息

 2、web服务器收到请求,进行处理,页面分为两种页面(静态http页面,动态php,asp,jspyem)

 3、数据通过响应response返回给浏览器和应用

    GET请求和POST请求的区别(面试)

        (1)都是http请求的方式,GET一般只是为了获取数据,而POST获取的同时上传附加数据

        (2)GET所有参数都在URL网址中,POST请求参数放在请求头中

        (3)应用,知识间的获取数据,使用GET请求。

 

 AFNetworking的介绍:

 1、简介:

    常见的处理网络请求方式

    (1)NSURLConnect/NSURLSession

    (2)ASIHttpRequest

  (3) AFNetworking

 GET请求

 JSON下载

 XML下载

 POST请求

 文件上传

 文件下载

 图片异步加载

 判断网络状态

 头部

 ASIHttpRequest

 */

 

3、AFNetworking的使用:

利用AFNetworking进行网络请求

- (void)viewDidLoad
{ 
 //1、GET请求(html,json,xml)
//    [self textGetRequest];
    //2、POST请求
//    [self textPOSTRequest];
    //3、上传文件(图片)
    [self textUploadFile];
    //4、下载文件
//    [self textDownloadFile];
    //5、监控网络状态
    [self textMonitorNetworkStatus];
    //6、图片异步下载(替代SDWebImage)
    //#import "UIKit+AFNetworking.h"
    //7.有些请求特殊的请求头
    // BAIDU_WISE_UID=wapp_1428385381699_466;
    //AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //[manager.requestSerializer setValue:@"wapp_1428385381699_466" forHTTPHeaderField:@"BAIDU_WISE_UID"];
    
}
-(void)textMonitorNetworkStatus
{
    AFHTTPRequestOperationManager *manager=[[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]];
    //一旦网络状态改变就会调用这个block
    [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSDictionary *dict=@{
        @(AFNetworkReachabilityStatusUnknown):@"未知",
        @(AFNetworkReachabilityStatusNotReachable):@"不可达",
        @(AFNetworkReachabilityStatusReachableViaWWAN):@"GPRS",
        @(AFNetworkReachabilityStatusReachableViaWiFi):@"wifi"
        };
        NSLog(@"状态为:%@",dict[@(status)]);
    }];
    //开启监控!
    [manager.reachabilityManager startMonitoring];
}
-(void)textDownloadFile
{
    NSString *urlStirng=@"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip";
    //创建回话管理器对象(通过默认配置)
    AFURLSessionManager *manager=[[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSURLSessionDownloadTask *task=[manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStirng]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        //返回下载的位置
        NSString *str=[NSString stringWithFormat:@"%@/Documents/all.zip",NSHomeDirectory()];
        NSLog(@"str == %@",str);
        return [NSURL fileURLWithPath:str];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"\n&&&&&下载完成");
    }];
    [task resume];
}
-(void)textUploadFile
{
    //POST上传接口
    NSString *urlSting=@"http://quiet.local/uploadtest/upload.php";
    //上传文件的路径
    NSString *path=[[NSBundle mainBundle]pathForResource:@"12.jpg" ofType:nil];
    
    //参数名:image :参数值就是图片
    AFHTTPRequestOperationManager *manager=[AFHTTPRequestOperationManager manager];
    manager.responseSerializer=[AFHTTPResponseSerializer serializer];
    
    //实现:上传的数据附加到body中
    //mimeType多用途互联网邮件扩展类型,每一种文件都有一个类型
    [manager POST:urlSting parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"12.jpg" fileName:@"1212.jpg" mimeType:@"image/jpeg" error:nil];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"\n***************str = %@",str);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"\n**************error = %@",error);
    }];
    

}
-(void)textPOSTRequest
{
    //网络接口:http://quiet.local/testdir/login.php
    //参数:@"user": @"quiet"
    NSString *urlString=@"http://quiet.local/testdir/login.php";
    AFHTTPRequestOperationManager *mamager=[AFHTTPRequestOperationManager manager];
    mamager.responseSerializer=[AFHTTPResponseSerializer serializer];//记住这一步要设置解析器为HTTP形式
    
    //第一个参数:传入地址 第二个参数:传入URL请求的参数,格式传入字典
    [mamager POST:urlString parameters:@{@"user": @"quiet",@"password":@"123"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"\n-----------------str =%@",str);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        
        NSLog(@"\n-------------error = %@",error);
        
    }];
}

-(void)textGetRequest
{
    NSString *urlSting =@"http://www.baidu.com";
    //定义AFNetworking管理
    AFHTTPRequestOperationManager *manager=[AFHTTPRequestOperationManager manager];
    //注意:默认认为数据是JSON,content-type 也是JSON,responseObject是解析的字典和数组。不是产生错误Code=-1016
    //解决方法:设置解析器为HTTP形式的,那么下载回来就是NSData
    manager.responseSerializer=[AFHTTPResponseSerializer serializer];
    [manager GET:urlSting parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        //responseObject 重要参数,包含下载数据
        NSString *str=[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"\n================str = %@",str);
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error =%@",error);
    }];
}