zoukankan      html  css  js  c++  java
  • IOS之开发Block

       数据存储

      plist,FMDB,归档。网络数据的传输与解析,网络传输建议用JSON格式数据,冗余数据少。

     数据下载下来缓存,可直接把缓存保存成文件,便于处理缓存中的文件。根据需求来定。

    block:

    1.什么是block

    //能极大的简化代码,提高效率。很多重要的开源库当中用block写的,不一定自己写,但是要知道怎么写。

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

    (1).按钮target action 一个方法传入按钮中

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

    (3).block:  语句块。 解决回调,可理解为“匿名函数”,定义在方法里面

    2.block的基本使用(语法)

    (1).block变量

        技巧,语法诡异。

         //block变量存储匿名函数

    //以下是定义block变量;函数名是block,变量类型void(^block)

        void(^block)();

         //以下定义block语句块,然后存储到block变量当中

        block =^void(){

            NSLog(@"this is block");

        };

    (2).block语句块

    (3)参数和返回值

    (4)捕获外部变量

    (5)block 注意事项

     3.block在开发中 应用(OC,UI,网络)

    3.1 OC中的应用

           Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值。Block实体形式如下:^(传入参数列){行为主体};

    Block实体开头是“^”,接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal。行为主体可以用return回传值,类型会被compiler自动辨别。如果没有参数列要写成: ^(void)。

       Block Pointer是这样定义的:

     回传值(^名字)(参数列);

     比如下面的例子:

       void(^block)();
        
        //以下定义block语句块,然后存储到block变量当中
       block =^void(){
           NSLog(@"this is block");
       };
    int (^myAdd) (int x,int y)= ^int (int x,int y){
            return x+y;
        };
        int s =myAdd(12,20);
        NSLog(@"s===%d",s);

    block的使用场合

    函数指针

    实现回调函数

    qsort

    block的函数类型变量+语句块===回调

    二、AFNetworking开源库

    1、AFNetworking的介绍

    常见的处理网络请求方式

    (1)NSURLConnection/NSURLSession

    (2) ASJHttpRequest 不更新了,少用

    (3)AFNetworking:推荐使用,项目中使用

    (4)MKNetWorking

    2、GET请求

    3 JSON下载

    4 DML下载

    5.POST请求

    6.文件上传

    7.文件下载

    8图片异步加载

     9 判断网络状态

    10头部

    11 ASJHttpRequest

    //1 GET请求 (html,json,xml)
    //    [self testGetRequest];
        //2POST请求
    //    [self testPostRequest];
        //3  上传文件,上传图片
        
    //    [self testUploadFile];
        
        //4.下载文件
    //    [self testDownloadFile];
        //5.监控网络形态
        [self testMonitorNetworkStatus];
        //6.图片异步下载(可替代SDwebimage)
        //可加上 UIkit +AFNetworking.h
        
        //7. 有些请求有特殊的请求头
        //
     
    }
    
    -(void)testMonitorNetworkStatus
    {
        
        AFHTTPRequestOperationManager *manager =[[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]];
        
        [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            NSDictionary *dict =@{@(AFNetworkReachabilityStatusUnknown):@"未知",@(AFNetworkReachabilityStatusNotReachable):@"不可达",@(AFNetworkReachabilityStatusReachableViaWWAN):@"GPRS",@(AFNetworkReachabilityStatusReachableViaWiFi):@"WIFI"};
            NSLog(@"状态为  %@",dict[@(status)]);
            
        }];
        //开启状态监视
        [manager.reachabilityManager startMonitoring];
    
    }
    
    -(void)testDownloadFile
    {
        
    //创建会话管理器对象(通过默认配置)
    NSString *urlString =@"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:urlString]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
            NSString *path =[NSString stringWithFormat:@"%@/Documents/all.zip",NSHomeDirectory()];
            NSLog(@"path  ==%@",path);
            return [NSURL fileURLWithPath:path];
            
        } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
            NSLog(@"下载wancheng");
        }];
    
        [task resume];
    
     //返回文件保存的位置 
    }
    
    //测试上传文件
    -(void)testUploadFile
    {
      NSString *urlString =@"http://quiet.local/uploadtest/upload.php";
        //参数名 ;image  :参数值是图片
        AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
        manager.responseSerializer =[AFHTTPResponseSerializer serializer];
        
       [manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
           //上传的数据附加到请求中
           //mimetype 每种文件都有一个类型
           NSString *path =[[NSBundle mainBundle] pathForResource:@"back2.jpg" ofType:nil];
           
           
           [formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"image" fileName:@"jayzhang.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(@"erro == %@",error);
    
       }];
    }
    
    -(void)testPostRequest
    {
    //接口,POST接口 :http://quiet.local/testdir/login.php
       
     NSString *urlString1 =@"http://quiet.local/testdir/login.php";
    
        AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
        manager.responseSerializer =[AFHTTPResponseSerializer serializer];
        
        [manager POST:urlString1 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(@"erro == %@",error);
    
        }];
    
        
    
    }
    
    
    
    -(void)testGetRequest
    {
      NSString *urlString =@"http://www.baidu.com";
        urlString =@"http://m.weather.com.cn/data/101010100.html";
        //定义AFNetworking管理
        
        AFHTTPRequestOperationManager *manager =[AFHTTPRequestOperationManager manager];
        
        //默认认为数据是JSON,content-type 也是JSON,responseObject 是解析的字典和数组。不是产生错误Code =-1016,解决:设置解析器为HTTP形式,下载回来是NSData.
        
        manager.responseSerializer =[AFHTTPResponseSerializer serializer];
        
        [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    //        NSLog(@"a ==%@",responseObject);
            
            NSString *str  =[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            NSLog(@"str ===%@",str);
            
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"erro == %@",error);
        }];
    
    }

    12网络基础知识

    (1)一次HTTP请求的完整过程(对于IOS开发很重要)

    抓包。

     (2)以打开百度网页为例,请求(get,post,delete,update). 请求包含HTTP类型(GET,POST),地址(URL),协议(HTTP、1.1),请求头部,附加信息;

     页面分为两种页面,静态的HTML页面,动态PHP,ASP,JSP页面,数据通过响应response返回给浏览器以及应用。

    (3)GET请求,POST请求

    都是请求的一个方式,GET一般只是为了获取数据,而POST获取的同时上传附加数据;GET请求所有参数都在URL网址中,POST请求参数放在请求头中;

     如果只是简单的获取数据,使用GET请求,登陆传密码,上传文件或图片使用POST请求。

  • 相关阅读:
    Kubernetes 升级过程记录:从 1.17.0 升级至最新版 1.20.2
    歼10:职业有个基本属性,为了糊口。然后再区分 主动 or 被动,被动者只是为了糊口,那自然是看不起自己的职业
    红胖子:写给人生的九封信,愿你的人生淡定从容,繁华似锦!!!
    Embarcadero MVP(68位,全部都有个人主页)
    Delphi 26 岁
    C# Assembly 与 Reflection
    你精通那么多技术,为何还是做不好一个项目
    Linux 6 个“吓人”的 命令
    Distributed Application runtime
    RocketMQ and kafka
  • 原文地址:https://www.cnblogs.com/jayzhang/p/4397932.html
Copyright © 2011-2022 走看看