美文网首页
iOS Block用法和实现原理

iOS Block用法和实现原理

作者: 00after | 来源:发表于2019-05-05 11:35 被阅读0次

原文
iOS Block用法和实现原理

《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、Block、GCD三个概念,有趣是因为讲原理、实现的部分是其它iOS专业书籍里少有的。然而每个章节不读个三五遍还是比较难理解贯通的。本文针对其中的Block部分做些简单的笔记记录,讲述Block的用法和部分实现原理,详细解说从原书中寻。

Block概要

Block:带有自动变量的匿名函数。
匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域。
自动变量:栈上声明的一个变量不是静态变量和全局变量,是不可以在这个栈内声明的匿名函数中使用的,但在Block中却可以。
虽然使用Block不用声明类,但是Block提供了类似Objective-C的类一样可以通过成员变量来保存作用域外变量值的方法,那些在Block的一对{}里使用到但却是在{}作用域以外声明的变量,就是Block截获的自动变量。

Block常规概念

Block语法
Block表达式语法:

^ 返回值类型 (参数列表) {表达式}

例如:

    ^ int (int count) {
        return count + 1;
    };

其中,可省略部分有:
返回类型,例:

    ^ (int count) {
        return count + 1;
    };

参数列表为空,则可省略,例:

    ^ {
        NSLog(@"No Parameter");
    };

即最简模式语法为:

^ {表达式}

Block类型变量

声明Block类型变量语法:

返回值类型 (^变量名)(参数列表) = Block表达式

例如,如下声明了一个变量名为blk的Block:

    int (^blk)(int) = ^(int count) {
        return count + 1;
    };

当Block类型变量作为函数的参数时,写作:

- (void)func:(int (^)(int))blk {
    NSLog(@"Param:%@", blk);
}

借助typedef可简写:

typedef int (^blk_k)(int);

- (void)func:(blk_k)blk {
    NSLog(@"Param:%@", blk);
}

Block类型变量作返回值时,写作:

- (int (^)(int))funcR {
    return ^(int count) {
        return count ++;
    };
}

借助typedef简写:

typedef int (^blk_k)(int);

- (blk_k)funcR {
    return ^(int count) {
        return count ++;
    };
}

相关文章

  • iOS Block用法与实现原理

    最近在看Block原理的时候看了一篇文章iOS Block用法和实现原理,并且对照了《Objective-C高级编...

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • iOS Block用法和实现原理

    Block概要 Block:带有自动变量的匿名函数。 匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作...

  • iOS Block用法和实现原理

    《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、Block、GCD三个概念,有趣是因为...

  • iOS Block用法和实现原理

    原文iOS Block用法和实现原理 《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、...

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

  • iOS block的用法和原理实现

    1.block的语法 1.1 标准声明和定义 直接定义block时,可以省略定义时的返回类型,即 若参数类型为vo...

  • Block 深入浅出

    iOS Block用法和实现原理 《Objective-C高级编程》是一本有趣又难懂的书,全书就讲了引用计数、Bl...

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

  • iOS 内存管理

    深入研究Block捕获外部变量和__block实现原理 http://ios.jobbole.com/88406...

网友评论

      本文标题:iOS Block用法和实现原理

      本文链接:https://www.haomeiwen.com/subject/moecoqtx.html