美文网首页iOS基础学习
Objective-C基础学习之Block基本概念和Block注

Objective-C基础学习之Block基本概念和Block注

作者: WenJim | 来源:发表于2017-10-13 14:46 被阅读23次

1.什么是Block

  • Block是iOS中一种比较特殊的数据类型

  • Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛

    • 动画
    • 多线程
    • 集合遍历
    • 网络请求回调
  • Block的作用

    • 用来保存某一段代码, 可以在恰当的时间再取出来调用
    • 功能类似于函数和方法

2.block的格式

  • Block的定义格式
返回值类型 (^block变量名)(形参列表) = ^(形参列表) {

};
Block的定义格式.png
  • block最简单形式
void (^block名)() = ^{代码块;}

例如:
void (^ sumBlock)() = ^{ NSLog(@"CWJ"); };
  • block带有参数的block的定义和使用
void (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }

例如:
void (^ sumBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
  • 带有参数和返回值的block
返回类型 (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }

例如:
int (^sumBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
  • 调用Block保存的代码
block变量名(实参);

注意事项

3.Block注意事项

  • 在block内部可以访问block外部的变量
int  a = 10;
void (^ wjBlock)() = ^{
    NSLog(@"a = %i", a);
    }
wjBlock();
输出结果: 10
  • block内部也可以定义和block外部的同名的变量(局部变量),此时局部变量会暂时屏蔽外部
int  a = 10;
void (^wjBlock)() = ^{
    int a = 50;
    NSLog(@"a = %i", a);
    }
wjBlock();
输出结果: 50
  • 默认情况下, Block内部不能修改外面的局部变量
int b = 5;
void (^wjBlock)() = ^{
    b = 20; // 报错
    NSLog(@"b = %i", b);
    };
wjBlock();
  • Block内部可以修改使用__block修饰的局部变量
__block int b = 5;
void (^wjBlock)() = ^{
  b = 20;
  NSLog(@"b = %i", b);
  };
wjBlock();
输出结果: 20

相关文章

网友评论

    本文标题:Objective-C基础学习之Block基本概念和Block注

    本文链接:https://www.haomeiwen.com/subject/jauzyxtx.html