参考文章
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();
本文深入探讨了Block在iOS开发中的使用,包括声明、类型定义及通过下划线修改局部变量的方法。重点讲解Block与对象间可能产生的循环引用问题,并提供弱引用的解决方案。
3万+

被折叠的 条评论
为什么被折叠?



