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

本文深入探讨了Block在iOS开发中的使用,包括声明、类型定义及通过下划线修改局部变量的方法。重点讲解Block与对象间可能产生的循环引用问题,并提供弱引用的解决方案。

参考文章

简书

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值