前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >block-基础概念和使用

block-基础概念和使用

作者头像
大壮
发布2020-04-09 11:54:35
2580
发布2020-04-09 11:54:35
举报
文章被收录于专栏:大壮大壮

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

一.基础

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

block的结构体:

代码语言:javascript
复制
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.讲解

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

代码语言:javascript
复制
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定义别名,简化使用

代码语言:javascript
复制
typedef addBolck (^addBolck)(int num);

(2) 作为局部变量

代码语言:javascript
复制
int (^addBlock)(int num) = ^ (int num) { return num + value; };

(3) 作为属性

代码语言:javascript
复制
@property (nonatomic, copy) int (^addBlock)(int num);

(4) 作为方法变量

代码语言:javascript
复制
- (void)someMethodBlock:(int (^)(int num))block;

(5) 作为局部变量

代码语言:javascript
复制
[self someMethodBlock:^returnType (parameters) {...}];
tip:
  1. 其中(^)是块的语法标记
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.基础
  • 二.使用
    • 1.讲解
      • 2.使用方式
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档