人在千锋-网络学习第四天之网络请求-程序员宅基地

技术标签: php  json  移动开发  

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

一、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);
    }];
}

 

 

转载于:https://www.cnblogs.com/muer126/p/4399249.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30954607/article/details/95406070

智能推荐

Vue传递数据到后台SpringMVC接收解析返回_vue参数编码传到.net后端解析-程序员宅基地

文章浏览阅读2.4w次,点赞2次,收藏8次。最近在自学vue,开始以为跟angular大同小异,但是真正使用的时候发现还是很多不一样的地方,可能是因为刚刚开始理解的还不够深入O(∩_∩)O。 下面说说前端jsp怎么和后台交互,后台使用的是springMvc框架。html部分&lt;div id="app"&gt; &lt;table class="table table-bordered table-striped" style..._vue参数编码传到.net后端解析

使用bochs调试操作系统_oslab存在另一个bochs调试会话-程序员宅基地

文章浏览阅读1.7k次。自 http://bbs.pediy.com/showthread.php?t=123767&highlight=bochs一、环境配置: 操作系统:Microsoft Windows XP Professional Service Pack 3 调试工具:bochs 2.4.0.01、安装:Bochs Bochs是一种十分轻便的使用c++编写的开源IA-_oslab存在另一个bochs调试会话

html页面垂直滚动条不显示,隐藏html横向但不是垂直滚动条-程序员宅基地

文章浏览阅读144次。Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type a..._html中只显示横向滚动条不显示垂直滚动条

MISRA C编程规范标准_函数应该声明为具有文件作用域-程序员宅基地

文章浏览阅读3k次。MISRA (The Motor Industry Software Reliability Association),中文名称为汽车工业软件可靠性联会,是英国的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。其核心使命是为汽车工业提供服务和协助,帮助厂方开发安全的、高可靠性的嵌入式软件。MISRA C则是由MISRA提出的针对嵌入式C语言开发标准,目的是提高嵌入式系统的安全性、可读性和可..._函数应该声明为具有文件作用域

h5打开android相册非文件管理器,Android webview中打开相机拍照和选择相册-程序员宅基地

文章浏览阅读805次。记录在Android的webview加载的h5中调用相机和选择相册的步骤1申请权限此时需要申请相机和相册的权限(1)android.Manifest.permission.CAMERA)(2)android.Manifest.permission.READ_EXTERNAL_STORAGEprivate void getPermission() {if (Build.VERSION.SDK_INT..._h5 安卓打开相机

一句话说清NI公司的LabView、CVI、MeasurementStudio三者之间的区别_ni cvi-程序员宅基地

文章浏览阅读2k次。LabView是NI公司傻瓜化的图形操作测试开发工具;CVI是NI公司C语言风格的测试开发语言,当然也是工具;Measurement Studio是面向一直使用微软开发工具如VC、C#的那些开发人员,而提供的测试开发工具。原文链接:https://blog.csdn.net/dijkstar/article/details/30290905..._ni cvi

随便推点

psnr(峰值信噪比)-程序员宅基地

文章浏览阅读2.9k次。峰值信噪比(PSNR),一种评价图像的客观标准。它具有局限性,PSNR是“Peak Signal to Noise Ratio”的缩写。peak的中文意思是顶点。而ratio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,输出的影像都会在某种程度与原始影像不同。为了衡量经过处理后的影像品质,我们通常会参...

学习SSM遇到的问题及解决方案_ssm技术解决的主要问题就行。-程序员宅基地

文章浏览阅读1.8k次。1. 前台往后台传值,后台接受方式原先是一个一个的接收值,并用单个值进行操作改进:将数据封装,用对象的方式传值接收,用对象.属性的方式操作2.Service包存在的作用Controller 是可以直接和Mapper 对应,但后期维护不易Service 降低耦合性,对业务逻辑的更改提供便利..._ssm技术解决的主要问题就行。

《算法心得:高效算法的奥秘(原书第2版)》-程序员宅基地

文章浏览阅读228次。《算法心得:高效算法的奥秘(原书第2版)》基本信息原书名:Hacker's Delight,Second Edition原出版社: Addison-Wesley Professional作者: (美)Henry S. Warren,Jr译者: 爱飞翔丛书名: 名家经典系列出版社:机械工业出版社ISBN:9787111453567上架时间:2014-3-5..._hacker's delight second edition

开箱即用,完整版 LLaMA2 大模型全流程方案,开源了!-程序员宅基地

文章浏览阅读328次。来源:GitHubDailyChatGPT 引发的大模型热潮愈演愈烈,全球科技巨头和明星初创争相入局,打造以 AI 大模型为核心的竞争力和多样化商业使用需求。其中 LLaMA 系列模型,因良好的基础能力和开放生态,已积累了海量的用户和实际应用案例,成为无数开源模型后来者的模仿和竞争的标杆对象。但是,如何降低类 LLaMA2 大模型预训练成本,如何基于 LLaMA2 通过继续预训练和微调,低成本构建..._llama2 模型 百度网盘

java.io.IOException 断开的管道 解决方法 ClientAbortException: java.io.IOException: Broken pipe-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏8次。转载于:https://blog.csdn.net/zqz_zqz/article/details/52235479今天公司技术支持的童鞋报告一个客户的服务不工作了,紧急求助,于是远程登陆上服务器排查问题。 查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但是最多还是这个: 24-Nov-2016 09:54:21.116 SEVERE [http-nio-8081-Acceptor-0] org.apache.t..._clientabortexception: java.io.ioexception: broken pipe

QT 任务栏进度条_qt进度条自动从零到满-程序员宅基地

文章浏览阅读2.4k次。简述我们下载东西的时候都会想知道自己下载多少了,还有多久可以下完,但是我们也不可能一直盯着程序中的进度条看,还要去做别的事。这时候任务栏进度条就有用了,我们可以在做别的事时只需要看任务栏进度条就能够知道下载的进度了,很多软件都有这样的功能,比如谷歌浏览器、迅雷。 ..._qt进度条自动从零到满