版权声明:本文系KevinAshen灵感之火花,转载请申明,一起前行! https://blog.csdn.net/KevinAshen/article/details/83040356
参考文章
GitHub地址
前言
- 第一篇参考文章已经将块分析的非常清楚了,我这也只是拾人牙慧,挑些核心点的代码总结下,想知道详细的原理,可以参阅第一篇文章
- 第二篇参考文章讲了传值的几种方式,我们关注的是Block传值,这里我也是基本在这篇文章的基础上做的Demo,另外多些自己的见解在注释里
关于Block
- 声明:Block变量的声明格式为: 返回值类型(^Block名字)(参数列表);
- typrdef定义:typedef void(^SayHello)();//之后就等于说能用SayHello为类型名去定义一个无返回值与参数的块
- 使用下划线来在块中修改局部变量:__block int global = 100;
void(^myBlock)() = ^{
NSLog(@“global = %d”, global);
};
global = 101;
// 调用后控制台输出"global = 101" - 循环引用原因:如果对象内部有一个Block属性,而在Block内部又访问了该对象,那么会造成循环引用
- 解决办法:弱引用Person *p = [[Person alloc] init];
__weak typeof§ weakP = p;
p.myBlock = ^{
NSLog(@"------%@", weakP);
};
p.myBlock();