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:
- 其中(^)是块的语法标记