type
status
date
slug
summary
tags
category
icon
password

一、Block入门

Block是封装工作单元的对象,即可在任何时间执行的代码段。它们在本质上是可移植的匿名函数,可作为方法和函数的参数传入,或可从方法和函数中返回。Block本身具有一个已类型化的参数列表,且可能具有推断或声明的返回类型。您还可以将块赋值给变量,然后像调用函数一样调用它。
插入符号 (^) 是用作块的语法标记。块的参数、返回值和正文(即执行的代码)存在其他类似的语法约定。
Block共享局部作用域的数据。Block的这项特征非常有用,因为如果您实现一个方法,并且该方法定义一个块,则该块可以访问该方法的局部变量和参数(包括堆栈变量),以及函数和全局变量(包括实例变量)。这种访问是只读的,但如果使用 __block 修饰符声明变量,则可在Block内更改其值。即使包含有块的方法或函数已返回,并且其局部作用范围已销毁,但是只要存在对该块的引用,局部变量仍作为块对象的一部分继续存在。
作为方法或函数参数时,Block可用作回调。被调用时,方法或函数执行部分工作,并在适当时刻,通过Block回调正在调用的代码,以从中请求附加信息,或获取程序特定行为。Block使调用方在调用时能够提供回调代码。Block从相同的词法作用范围内采集数据(就像宿主方法或函数所做的那样),而非将所需数据打包在“关联”结构中。由于Block代码无需在单独的方法或函数中实现,您的实施代码会更简单且更容易理解。

二、语法

引用自:【1】【2
notion image

1. 局部变量

2. 属性

3. 函数参数

4. typedef

参考

链接

  1. 马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today)
  1. Block Implementation Specification
  1. Blocks Programming Topics
  1. Fucking blocks syntax