Block的写法
无参数
void(^blockXX)() = ^{代码实现};
有参数
void(^blockXX)(参数列表) = ^(参数列表){代码实现};
有参数有返回值
返回类型(^blockXXX)(参数列表) = ^(参数列表){代码实现};
调用block保存的代码
block变量名(实参)
typedef简化block声明作为属性
声明
typedef 返回类型(^BlockXX)(参数列表)
属性
@property(nonatomic,copy)BlockXX blockXX;
1.响应事件
2.传递数据
如果block访问的外部变量是局部变量,那么就是值传递,外界改了,不会影响里面
如果block访问的外部变量是__block或者static修饰,或者是全局变量,那么就是指针传递,block里面的值和外界同一个变量,外界改变,内部也改变;
(1)无论当前环境是ARC 还是 MRC,只要block没有访问外部变量,block始终在全局区;
(2)MRC情况下:
1.block如果访问外部变量,block在栈里
2.不能对block使用retain,否则不能保存在堆里
3.只有使用copy,才能放到堆里
ARC情况下:
1.block如果访问外部变量,block在堆里
2.block可以使用copy和strong,并且block是一个对象
ÿ