美文网首页
block-基础概念和使用

block-基础概念和使用

作者: userName | 来源:发表于2020-04-03 19:16 被阅读0次

    block主要准备分为3个文章记录。
    第一章:基础概念和使用
    第二章:捕获变量
    第三章:持有变量

    一.基础

    block的定义是:带有自动变量的匿名函数。
    或者也可说是一个闭包函数。

    block的结构体:

    struct Block_layout {
        void *isa;
        int flags;
        int reserved;
        void (*invoke)(void *, ...);
        struct Block_descriptor *descriptor;
        /* Imported variables. */
    };
    
    struct Block_descriptor {
        unsigned long int reserved;
        unsigned long int size;
        void (*copy)(void *dst, void *src);
        void (*dispose)(void *);
    };
    

    二.使用

    1.讲解

    下面是如何把块变量赋值给一个变量的语法讲解:

    int value = 7;
    int (^addBlock)(int num) = ^ (int num) { return num + value; };
    

    //变量
    int 是返回类型
    (^addBlock) "^"符号将addBlock声明为一个块对象
    (int num) 声明参数

    //块变量
    ^ (int num) { return num + value; }; 整体定义为块对象的语法结构
    { return num + value; } 这个部分是块对象主体部分

    2.使用方式

    (1) 使用typedef给block定义别名,简化使用

    typedef addBolck (^addBolck)(int num);
    

    (2) 作为局部变量

    int (^addBlock)(int num) = ^ (int num) { return num + value; };
    

    (3) 作为属性

    @property (nonatomic, copy) int (^addBlock)(int num);
    

    (4) 作为方法变量

    - (void)someMethodBlock:(int (^)(int num))block;
    

    (5) 作为局部变量

    [self someMethodBlock:^returnType (parameters) {...}];
    
    tip:
    1. 其中(^)是块的语法标记

    相关文章

      网友评论

          本文标题:block-基础概念和使用

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