block-基础概念和使用

2020-04-03  本文已影响0人  userName

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. 其中(^)是块的语法标记
上一篇 下一篇

猜你喜欢

热点阅读