• 1.概述

      • block : Object - C对于闭包的实现 .
      • 闭包 = 一个函数(或是指向函数的指针) +该函数执行的外部的上下文变量(自由变量)
    • 2.对block的理解
      • 可以嵌套定义,定义 block 方法和定义函数方法相似
      • block可以定义在方法外部内部或外部
      • 只有调用block时候 才会执行 { } 内的代码
      • 本质是对象,使代码高聚合
    • 3.block的使用方法
      • 无参数无返回值

        void (^myBlock)();
        ​myBlock = ^( ) {
        NSLog(@"");
        };
        myBlock();​​​
      • 有参数无返回值
         
        void (^myBlock)(NSString *str);
        myBlock = ^(NSString *str){
        ​ NSLog(@"%@",str);
        };
        myBlock(@"");
      • 有参数有返回值
        self.myBlock = ^int(int x, int y) {
        return x+y;
        };
        self.myBlock(, );
      • 无参数有返回值
        self.myBlock = ^int{
        return ;
        };
        self.myBlock();
    • 4.block作为OC的方法参数
      • 无参数传递的block

        - (void)test:(void(^)())testBlock{
        testBlock();
        }

        //调用方式
        [self test:^{
        NSLog(@"aaaa");
        }];

        ​​​

      • 有参数传递的block
        - (void)test:(void(^)(NSString *str))testBlock{
        testBlock(@"aaaa");
        }
        //调用方式
        [self test:^(NSString *str) {
        NSLog(@"%@",str);
        }];

        ​​

    • 5.block回调
      • block回调在项目中经常用到,小编就AFNetworking网络请求回调里摘取部分举例.

        //.h
        ​​
        - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
        parameters:(nullable id)parameters
        success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
        failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;


        //​​.m

        NSURLSessionDataTask *sessionTask = [manager POST:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (success) {
        success(responseObject);
        }
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) {
        failure(error);
        } }];

iOS 技术篇:从使用到了解block底层原理 (一)的更多相关文章

  1. iOS 技术篇:从使用到了解block底层原理 (二)

    block实质 序言 上篇文章中主要通过简单的demo展示了block的使用场景,本篇将基于上篇文章iOS 技术篇:从使用到了解block底层原理 (一)进一步了解block底层的实现原理. bloc ...

  2. 《React Native 精解与实战》书籍连载「React Native 底层原理」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  3. iOS - Block底层解析

    Block是iOS开发中一种比较特殊的数据结构,它可以保存一段代码,在合适的地方再调用,具有语法简介.回调方便.编程思路清晰.执行效率高等优点,受到众多猿猿的喜爱.但是Block在使用过程中,如果对B ...

  4. iOS底层原理总结 - 探寻block的本质(一)

        面试题 block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMu ...

  5. iOS OC语言: Block底层实现原理

    先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2) ...

  6. iOS OC语言: Block底层实现原理 (转载)

    作者:Liwjing 地址:http://www.jianshu.com/users/8df89a9d8380/latest_articles 先来简单介绍一下Block Block是什么? 苹果推荐 ...

  7. Objective-C中block的底层原理

    先出2个考题: 1. 上面打印的是几,captureNum2 出去作用域后是否被销毁?为什么? 同样类型的题目: 问:打印的数字为多少? 有人会回答:mutArray是captureObject方法的 ...

  8. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self

    前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: ...

  9. 最详细的block底层

    主要讲述的要点: block 干什么用的 block 语法 block 底层实现 block 变量捕捉 block 的种类.在存储空间中的存储位置 block 循环引用 __block 在ARC 中 ...

随机推荐

  1. mongodb系列~ mongodb慢语句(3)

    简介: 关于mongodb慢日志是如何收集 一 mongodb慢日志的开启 1 直接设置参数,不重启服务:db.setProfilingLevel(1) 2 添加启动参数,重启服务:添加profile ...

  2. Fragment中onCreateView()和onActivityCreated():静态/动态View

    在编写Fragment时,在onCreateView()方法中启动了一个初始化自定义View的方法 initView(),但是调试时就崩溃,打印日志发现是这里出了问题,就将这个方法放到了onActiv ...

  3. 【Linux】VMware虚拟机中如何配置静态IP

    此处详解如何在VMware虚拟机中配置静态IP. 上图是一个草图,大致说明下VMware网络情况.网段指某个IP范围,例如一栋小区楼和另一栋小区楼就不是一个网段 如果你在A小区,你女朋友在B小区,你想 ...

  4. ES系列十七、logback+ELK日志搭建

    一.ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制.无论是开发人员还是运维人员都无法准确的定位服务.服务器上面出现的种种问题,也没有高效搜索日志内容 ...

  5. Qt Excel

    在pro文件添加 QT +=axcontainer 头文件 #include <QAxObject> void MainWindow::on_btnSelectFileDialog_cli ...

  6. Solution of Publishing failed with multiple errors Error copying file static\

    1.前言 由于系统被IT打了防病毒补丁,然后启动web项目一直出现Publishing failed with multiple errors Error copying file static... ...

  7. Android studio下将项目代码上传至github包括更新,同步,创建依赖

    AS中设置GIT 一.开篇 本文讲如何使用Android Studio将项目上传到github,虽然讲上传github的文章很多,但是大部分都是使用Git Bash命令行,虽然效率高些,但是有点麻烦, ...

  8. Vue.js+Koa2移动电商实战 笔记

    地址:http://jspang.com/ https://github.com/shenghy/SmileVue 1.vant  https://www.youzanyun.com/zanui/va ...

  9. es6 entries(),keys() 和 values()

    for (let index of ['a', 'b'].keys()) { console.log(index); } // 0 for (let elem of ['a', 'b'].values ...

  10. python接口自动化测试三:代码发送HTTP请求

    get请求: 1.get请求(无参数): 2.get请求(带参数): 接口地址:http://japi.juhe.cn/qqevaluate/qq 返回格式:json 请求方式:get post 请求 ...