zoukankan      html  css  js  c++  java
  • 人在千锋-网络学习第四天之网络请求

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

    一、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(@"
    &&&&&下载完成");
        }];
        [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(@"
    ***************str = %@",str);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"
    **************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(@"
    -----------------str =%@",str);
            
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            
            NSLog(@"
    -------------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(@"
    ================str = %@",str);
            
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error =%@",error);
        }];
    }

     

  • 相关阅读:
    sql-DDL, DML 常用语句
    7.8 Structured Streaming
    7.7 输出操作
    7.6 转换操作
    7.5 高级数据源---Kafka
    7.4 基本输入源
    7.3 DStream操作
    7.2 Spark Streaming
    7.1 流计算概述
    6.3 使用Spark SQL读写数据库
  • 原文地址:https://www.cnblogs.com/muer126/p/4399249.html
Copyright © 2011-2022 走看看