对于Block的一些简单运用(Block回调传值GitHubDemo)

版权声明:本文系KevinAshen灵感之火花,转载请申明,一起前行! https://blog.csdn.net/KevinAshen/article/details/83040356

参考文章

简书

3g iOS wiki

GitHub地址

block-pass-value

前言

  • 第一篇参考文章已经将块分析的非常清楚了,我这也只是拾人牙慧,挑些核心点的代码总结下,想知道详细的原理,可以参阅第一篇文章
  • 第二篇参考文章讲了传值的几种方式,我们关注的是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();

猜你喜欢

转载自blog.csdn.net/KevinAshen/article/details/83040356
今日推荐